文章标题 原创 翻译 转载 文章内容 bug修复,浮点型计算 注意: 遇到浮点型计算、转型的时候一定要小心!!! 遇到浮点型计算、转型的时候一定要小心!!! 遇到浮点型计算、转型的时候一定要小心!!! 请看一下代码: ``` double a = 5000.11; int b = a * 100; double c = a * 100; ``` b和c它们的值是什么? 当你拿着b或者c去参与其他计算的时候,可能认为结果差不多。 看如下结果: ``` b = 500010 c = 500010.99999999994 ``` 你会发现它们之间相差1,之所以会这样是因为double转换为int时会省略掉小数部分。我们可能还认为a乘以100应该为500011实际上结果是c。 C++11中可以使用std::lround将double转为整型 ``` Defined in header <cmath> float round( float arg ); (1) (since C++11) double round( double arg ); (2) (since C++11) long double round( long double arg ); (3) (since C++11) double round( IntegralType arg ); (4) (since C++11) long lround( float arg ); (5) (since C++11) long lround( double arg ); (6) (since C++11) long lround( long double arg ); (7) (since C++11) long lround( IntegralType arg ); (8) (since C++11) long long llround( float arg ); (9) (since C++11) long long llround( double arg ); (10) (since C++11) long long llround( long double arg ); (11) (since C++11) long long llround( IntegralType arg ); (12) (since C++11) ``` [https://en.cppreference.com/w/cpp/numeric/math/round](https://en.cppreference.com/w/cpp/numeric/math/round) 文章类别 Python Mobile Android Java Shell Life Database Bug Windows IOS Tools Boost Node.js Mac Product Tips C/C++ Golang Javascript React Qt MQ MongoDB Design Web Linux LLM ChatGPT RAG AI 提交