2011-06-14 49 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);