今日写了一段代码,把双精度浮点型强制转型成整形,发现所得结与预测不符。
结果如下:
既然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。
假若有不对的地方,恳请指出!
期待看到大家更好的解释!!