2012-06-20 17 views
5

私はJavaスクリプトで計算を行っていますが、10進数の精度による問題に直面しています。 私は、正確な計算を投稿することはできませんが、これは私が書く予期しない結果Javascriptの予期しない結果

につながるやっているものです: alert(100.01-36.01); //結果は64

ですが、私が書くとき: alert(100.01-37.01); //結果63.00000000000001

であり、このように38.01 ...になります。 このような予期しない動作が表示されている理由を教えてください。 私は計算に固執しています。

ありがとうございます。

+2

機械は無限の精度を持たないので、浮動小数点値を比較するときは常に注意する必要があります.64はマシンの特殊な数値であり、2の累乗であり、非常にうまく表現できます。 –

+1

これはあなたを助けるかもしれませんhttp://stackoverflow.com/questions/588004/is-javascripts-math-broken –

+2

これは少なくとも100万回以上の質問がありましたので、質問を投稿する前に検索を使用してください。 – Niko

答えて

1

これを試してみてください:

 
<script type="text/javascript"> 
var n1 = parseFloat(100.01); 
var n2 = parseFloat(37.01); 
var res = (n1-n2) 
alert(res.toFixed(2)); 
</script> 
0

あなたが数字として数字を宣言しない場合は、文字列としてJSがする自動使用して、文字列が数字のみで使用されていない場合。

parseFloat(123.45)は10進数として設定します。