关于 float的四舍五入问题

3.55 can't be represented exactly in floating point. The internal value is something like 3.54999999999, which rounds to 3.5 

首先要明白浮点数在计算机中都绝大多数是近似值。其实C++对浮点数是自动四舍五入的,而且是非常严格地下一位为5则入,小于5则不入。这在double型时一般是没有问题的。在float型时,因精度低,内存中的近似值可能刚好使决定四舍五入的那一位的5不足额,造成不能四舍五入。例如float x=3.1415;,实际上内存中的二进制换算过来是3.14149999999999...;,这样取3位小数后就成了3.141而不是3.142了;如果换成double型,立马就变成3.142了。可以这样解决就保险了:float型的有效位是6位左右,给要输出的变量加一个1E-6,四舍五入的问题就解决了。

原文地址:https://www.cnblogs.com/hulian425/p/12370204.html