2012-01-26 6 views
2

私は、次の文2進数を追加すると、アクションスクリプトで間違った結果を与える

トレース(+ 13.75 10.12) //出力23.869999999999997

に問題があり、これがそうであるとどのように、なぜ誰も私を説明できますこのうち正確な23.87を得るには?

ありがとうございました

+1

チェックこのアウト http://stackoverflow.com/questions/2214003/is-there-a-fixed-point-library-for-actionscript-3 –

+0

ありがとうございました!私はから似たものをやっていましたAllan –

答えて

1

IEEE形式の精度のために起こります。

最も簡単なのはtoFixedです。

var num:Number = 10.12+13.75; 
var numStr:String = num.toFixed(2); 
var num2:Number = new Number(numStr); 
+0

Pranav、num2はNumber型でなければなりません。 – AsTheWormTurns

+0

num = Math.round(num * 100)/ 100;これはOKでしょうか? –

+0

@AsTheWormTurns doh! –

4

コンピュータ浮動小数点数は完全に正確ではありません。 JavaScript(そして、私はActionScriptであると仮定しています)は、64-bit IEEE 754 valuesECMAScript spec ref)を使用しています。この不正確さの最も良い例はおそらく0.1 + 0.2であり、これは0.30000000000000004になります。 23.87を取得するには、丸めなければなりません。

は、あなたが金融数学をやっている場合、あなたは(またはしない場合があります) 小数点数学ではなく、IEEE浮動小数点(Javaの BigDecimalクラスまたはC#の decimalタイプに似て何かを)し、ライブラリを使用したほうが良いかもしれません。ただし、十進数型には、 1/3を正確に表すことができないなど、独自の制限があります。

関連する問題