Floating point 为什么99.99/100=0.9998999999999

Floating point 为什么99.99/100=0.9998999999999,floating-point,floating-accuracy,rounding-error,Floating Point,Floating Accuracy,Rounding Error,可能重复: 而99.99*0.01=0.99 显然,这是一个由来已久的浮点舍入问题,然而在我看来,这种情况下的舍入误差相当大;我的意思是,我可能预期结果为0.999900000001或类似的“收盘”结果 作为记录,我在JavaVM和.Net环境中得到了相同的答案。为什么0.9998999999999999对您来说不够接近,而0.99990000000000001是好的? abs0.9999-0.9999999999999==abs0.9999-0.99990000000000001这是一个浮点

可能重复:

而99.99*0.01=0.99

显然,这是一个由来已久的浮点舍入问题,然而在我看来,这种情况下的舍入误差相当大;我的意思是,我可能预期结果为0.999900000001或类似的“收盘”结果


作为记录,我在JavaVM和.Net环境中得到了相同的答案。

为什么0.9998999999999999对您来说不够接近,而0.99990000000000001是好的?
abs0.9999-0.9999999999999==abs0.9999-0.99990000000000001

这是一个浮点错误。有关更多详细信息,请参见此。如果需要精确的分数结果,请使用小数。请参见

这个问题以前被问过很多次,这里只是一个例子,这个答案和0.99990000001之间的差别是一样的。你意识到了这一点,对吧?它和你预期的很接近。或者,更准确地说,如果你在计算结果的十进制表示法很重要的话,可以使用十进制。丹尼尔是对的:十进制表示法并不比二进制更精确。然而,它确实与我们通常使用的算法相匹配,因此,当需要与现有流程进行精确匹配时,比如在许多金融工作中,请使用十进制。啊,是的,0.999*8*非常准确。