可能重复:
Dealing with accuracy problems in floating-point numbers为什么99.99/100 = 0.9998999999999999
而99.99 * 0.01 = 0.99
显然,这是古老的浮点舍入的问题,但是在这种情况下,舍入误差对我来说似乎相当大;我的意思是我可能预期结果为0.99990000001或类似的“接近”结果。
为了记录,我在JavaVM和.Net环境中得到了相同的答案。
可能重复:
Dealing with accuracy problems in floating-point numbers为什么99.99/100 = 0.9998999999999999
而99.99 * 0.01 = 0.99
显然,这是古老的浮点舍入的问题,但是在这种情况下,舍入误差对我来说似乎相当大;我的意思是我可能预期结果为0.99990000001或类似的“接近”结果。
为了记录,我在JavaVM和.Net环境中得到了相同的答案。
为什么0.9998999999999999对你来说不够近(而0.9999000000000001好)?
abs(0.9999 - 0.9998999999999999)== abs(0.9999 - 0.9999000000000001)
啊,是的,0.999 * 8 * 好吧,发现了。 – redcalx 2010-05-28 15:43:56
这是一个浮点错误。对于(很多)更多的细节请看wikipedia article。如果您需要精确的分数结果,请使用decimal
(请参阅here)。
或者更确切地说,如果您正在进行计算,结果的**十进制表示**很重要,则使用“decimal”。 – 2010-05-28 15:42:48
丹尼尔是对的:十进制表示法并不比二元准确得多。但它与我们通常使用的算术相匹配,所以当需要与现有流程完全匹配时(如在许多财务工作中),请使用十进制。 – 2010-05-28 15:56:56
这已被问了很多次之前,在这里 - http://stackoverflow.com/questions/590822/dealing-with-accuracy-problems-in-floating-point-numbers-只是一个例子 – ChrisF 2010-05-28 15:35:45
这个答案之间的区别和0.99990000001是一样的。你意识到这一点,对吧? – SilentGhost 2010-05-28 15:36:33
它* *与您预期的相近。 – 2010-05-28 15:36:53