某次double强转int时精度损失的情况以及原因分析

今日写了一段代码,把双精度浮点型强制转型成整形,发现所得结与预测不符。

结果如下:


既然4.14*100=414,为什么把强转之后得到的结果却是413呢?

我们不如做个实验,测试一下原因。

实验如下:


测试发现414-(a*100)并不完全等于0,实际上有一定的误差。

由f = (414-(a*100)) = 0.000000000和g = ((a*100)-414) = -0.000000000,可以推断,a*100的值实际是小于414的。

我的分析:计算机并不能用double型中的64bit的0和1精确的表示出4.14,所以4.14只是一个近似值(也许是4.1399999...)

因此a*100实际的值可能是319.99999...(十分接近414,结果被输出时舍入成414了),导致最后强制转型成整型的时候413.99999...被舍入到413。


假若有不对的地方,恳请指出!

期待看到大家更好的解释!!

猜你喜欢

转载自blog.csdn.net/u014695839/article/details/50355714