2010-05-28 154 views
0

可能重复:
Dealing with accuracy problems in floating-point numbers为什么99.99/100 = 0.9998999999999999

而99.99 * 0.01 = 0.99

显然,这是古老的浮点舍入的问题,但是在这种情况下,舍入误差对我来说似乎相当大;我的意思是我可能预期结果为0.99990000001或类似的“接近”结果。

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

+0

这已被问了很多次之前,在这里 - http://stackoverflow.com/questions/590822/dealing-with-accuracy-problems-in-floating-point-numbers-只是一个例子 – ChrisF 2010-05-28 15:35:45

+4

这个答案之间的区别和0.99990000001是一样的。你意识到这一点,对吧? – SilentGhost 2010-05-28 15:36:33

+0

它* *与您预期的相近。 – 2010-05-28 15:36:53

回答

5

为什么0.9998999999999999对你来说不够近(而0.9999000000000001好)?
abs(0.9999 - 0.9998999999999999)== abs(0.9999 - 0.9999000000000001)

+0

啊,是的,0.999 * 8 * 好吧,发现了。 – redcalx 2010-05-28 15:43:56

2

这是一个浮点错误。对于(很多)更多的细节请看wikipedia article。如果您需要精确的分数结果,请使用decimal(请参阅here)。

+1

或者更确切地说,如果您正在进行计算,结果的**十进制表示**很重要,则使用“decimal”。 – 2010-05-28 15:42:48

+1

丹尼尔是对的:十进制表示法并不比二元准确得多。但它与我们通常使用的算术相匹配,所以当需要与现有流程完全匹配时(如在许多财务工作中),请使用十进制。 – 2010-05-28 15:56:56