2012-01-16 34 views
2

PFB的示例代碼片段說明問題:的Javascript浮點數此外

 var x=0.323; 
     var cumulativeVal = 0; 

     for(i=0;i<30;i++){ 
        cumulativeVal = cumulativeVal + x; 
        console.log(cumulativeVal); 
     } 

上述計算的結果是

0.323 
    0.646 
    0.9690000000000001 
    1.292 
    1.615.... 
    4.845000000000001 
    5.168000000000001 
    5.491000000000001 
    5.814000000000002.... 
    9.690000000000007 

注意,是越來越增加了額外的十進制值。我明白這與JavaScript中的值的精確性有關。但任何人都可以解釋?

+1

檢查http://stackoverflow.com/questions/1907114/integers-and-float-precision如何存儲浮動的很好的答案。 – zrvan

+0

可能重複[JavaScript的數學是否壞了?](http://stackoverflow.com/questions/588004/is-javascripts-math-broken) –

回答

4

沒有什麼特別的解釋。 IEEE-754 double-precision numbers不完全,十進制精確。小錯誤可能會蔓延。對於完整的小數精度(您應該注意,它不能完全代表三分之一),您需要使用爲此設計的類型。 (JavaScript沒有一個內置的;從其他語言的例子是BigDecimal從Java,或者C#decimal

這裏有一個簡單的例子,順便說一句:

0.1 + 0.2 = 0.30000000000000004 

它的Crockford's一個最愛。

+0

謝謝。至於簡單的例子,這些年來從來沒有意識到這一點:) – Raghav