2010-11-12 68 views
3

可能重複:
Is JavaScript's Math broken?的Javascript浮此外

<html> 
<body> 

<script type="text/javascript"> 
var w = 0; 
var weight1 = parseFloat("0.6"); 
var weight2 = parseFloat("0.3"); 
w = weight1 + weight2; 

document.write("total weight: " + w); 
</script> 

</body> 
</html> 

爲什麼本刊0.8999999999999999而不是0.90000000

+8

歡迎使用浮點數! – 2010-11-12 22:12:06

+0

重複http://stackoverflow.com/questions/1088216/whats-wrong-with-using-to-compare-floats-in-java? – PleaseStand 2010-11-12 22:12:52

+0

請參閱:http://stackoverflow.com/questions/1036662/weird-javascript-behaviour-floating-point-addition-giving-the-wrong-answer – 2010-11-12 22:13:33

回答

4

由於數量9/10不能幹淨利落地表示基數2,就像數字1/3不能完全代表基數10一樣。

-1

要回答你的問題 - 浮點數的精度與RAM的允許值一樣多。如果您創建一個浮點數1 - 它實際上可能是1.000000000000000000001

顯然你的解決方案包括四捨五入的數量,或使用int

+3

This與RAM沒有任何關係,並且指定精確的浮點數值1將永遠不會產生任何結果,但這與重複數字有關 - 就像1/3不能表示爲基數10中的有限數字序列一樣,數字1/10不能表示爲基數爲2的有限數字序列。 – cdhowie 2010-11-12 22:16:48

+0

我在那個上肯定是錯誤的。這是我測試的結果,並得出錯誤結論: ((1/10)* 1e63) - 1e62 = 1.141798154164768e + 46 – Mikhail 2010-11-15 20:40:31

0

簡單舍入錯誤。浮點數不準確。這使得比較更復雜一些。例如。如果(my_float == 3.0)將總是失敗。