添加浮点数的奇怪结果

时间:2011-06-14 05:52:21

标签: javascript

为什么我打印/显示

的结果
eval("11.05") + eval("-11")

它出现为0.05000000000000071而不是预期的0.05。有什么我想念的吗?

4 个答案:

答案 0 :(得分:5)

这与eval无关。实际上,如果您键入控制台11.05 - 11,会发生这种情况: enter image description here

这是编程语言如何存储浮点数的结果;它们包含一个小错误。如果您想了解更多相关信息,请check this out

答案 1 :(得分:3)

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

11.05 - 11会遇到同样的问题。

这只是通常的floating point problem

答案 2 :(得分: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);

答案 3 :(得分:0)

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