2011-06-14 71 views
3

奇怪结果为什么当我打印/显示与浮点加法

eval("11.05") + eval("-11") 

结果它出来作为0.05000000000000071而不是预期的0.05。有什么我失踪?

+1

这不是一个'eval'问题,它是由于浮点算术。看到[这个问题](http://stackoverflow.com/questions/588004/is-javascripts-math-broken) – 2011-06-14 05:54:07

回答

5

这有什么好做eval。事实上,如果您输入控制台,会发生以下情况:11.05 - 11enter image description here

这是编程语言如何存储浮点数的结果;他们包括一个小错误。如果你想阅读更多关于此,check this out

3

这与eval(你应该避免)无关。

您遇到与11.05 - 11相同的问题。

这只是一般的floating point problem

+0

优秀的参考网站。 – 2011-06-14 06:07:36

0

功能eval在这里是绝对无辜的。罪魁祸首是浮点运算。如果你不期望在小数点后有大量的数字,你可以限制。但你无法避免它。

1

正如其他人所指出的,这是一个浮点问题,与eval无关。现在对于eval:你可以很容易避免在这里,使用:

Number("11.05") + Number("-11"); 

为了避免错误的结果,你可以使用toPrecision

(Number("11.05") + Number("-11")).toPrecision(12); 
// or if you want 0.05 to be the outcome 
(Number("11.05") + Number("-11")).toPrecision(1);