2012-01-16 20 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は十進法で完全には完全に正確ではありません。小さな誤差が入り込む可能性があります。完全な10進精度(3分の1を完全に表すことはできません)には、そのために設計されたタイプを使用する必要があります。 (。JavaScriptが内蔵のものを持っていません。他の言語からの例は、C#からJavaからBigDecimal、またはdecimalだろう)

を簡単に例がな方法で、あります:

0.1 + 0.2 = 0.30000000000000004 

それはCrockford'sの一つですお気に入り。

+0

ありがとうございました。簡単な例としては、これらすべての年を実現したことはありません:) – Raghav