2011-09-24 71 views
2

來源:Pastebin 截圖:ImageJavaScript的增加0.000000002來計算

<input alt="Flyer|49.80" type="checkbox" class="price" id="cb3" name="price_3" /> 
<input alt="CMS|199.99" type="checkbox" class="price" id="cb1" name="price_1" /> 

嘿人!

也許有人可以給我一點提示,在我的來源問題。 它增加了0.000000002到我的總和,當增加49.8 + 199.99。

感謝您的任何建議!

+0

看看這個SO問題http://stackoverflow.com/questions/744099/javascript-bigdecimal-library –

+0

可能重複的[Javascript計算錯誤](http://stackoverflow.com/questions/3138793/javascript-calculation -bug) –

+0

感謝您的回答!解決:summe = String(summe.toFixed(2)); summe = summe.replace(「。」,「,」); –

回答

2
var val = 49.8 + 199.99; 
alert(val.toFixed(2)); 
5

您需要了解how floating point numbers work並將您的答案四捨五入爲最接近的兩位數字。

簡而言之,這就是JavaScript和所有使用浮點數的語言都是如何工作的。你不能「修復」它。你所能做的只是接受浮點數並不精確並處理它。

2

問題是javascript將數字存儲爲64位浮點數。這意味着有一些增加,其中在十進制數學中增加到100.00的數字將不在浮點數學中。 更多參考鏈接:

Is floating point math broken?

http://www.scribd.com/doc/5836/What-Every-Computer-Scientist-Should-Know-About-FloatingPoint-Arithmetic

您可以通過100的所有輸入相乘,將它們添加,然後比較到10,000避免這種情況。這將起作用,因爲2^-52和2^52之間的所有整數都可以用雙精度浮點數精確表示,但分數可能不是。 http://en.wikipedia.org/wiki/Double_precision_floating-point_format

另一種方法是滾動自己的小數加法函數以處理數字字符串。

3

是的,正如@duffymo暗示的那樣,問題與浮點數有關 - 具體而言,問題的根源(這不是JavaScript的特有問題)是沒有辦法將0.1映射到有限二進制浮點數