Javascript負の浮動小数点数の計算

Possible Duplicate:
Is JavaScript’s Floating-Point Math Broken?

JavaScriptでは、 -3.8800000000010186 の代わりに 23668-23671.88 の結果を -3.88 に計算するにはどうすればよいですか?

私は窓の計算を使用する場合、結果は-3.88ですので、丸めをしたくありません。

出来ますか?

2
nl ru de
非常に興味深い質問! JSが-3.88を返さない理由は誰にもありますか?
追加された 著者 sp00m,
becoz計算はバイナリですか?
追加された 著者 user192344,
@ジャンドーヴァーク:本当ですか?私はそれが理にかなってBigDecimalsを使用するためにWindowsの電卓を超えて置くことはしません。
追加された 著者 Thilo,
不可能です。 Windowsの電卓は丸めを行います。
追加された 著者 John Dvorak,
@ Thilo私はMsCalcがBigDecimalsより古くなっていると思います。
追加された 著者 John Dvorak,

2 答え

四捨五入したくない場合は、式の変数の精度を判断し、その精度を式の結果に適用する方法が必要です。残念ながら、JavaScriptには浮動小数点の精度を判断する方法がありません。

しかし、これを達成するための簡単な「ハッキリ」方法があります:

http://jsfiddle.net/SjxCY/2/

var num = 2.383;
var precision = (num+'').split('.')[1].length;
var final = (234234-num).toFixed(precision);
alert(final);

それはかなりではありませんが、それは動作します。

3
追加された
私はクロスブラウザをテストしました。例はありますか?
追加された 著者 Elliot B.,
同じ基本的な概念が加算、減算、および乗算に適用されますが、注意が必要です。 3.333から2.222を引いた場合、結果には小数点以下3桁の精度がありますが、3.333と2.222を掛け合わせると、最終的な答えには小数点第6位が入ります。同じ小さなハックを使って精度を計算することはできますが、式の算術演算子に応じて異なる方法で合計する必要があります。
追加された 著者 Elliot B.,
私は 2.383 " 2.383 +" "
追加された 著者 John Dvorak,
私はそれが常に文字列ではないと言っているわけではありません。予想以上に長くなるかもしれないと言っています。
追加された 著者 John Dvorak,
加算/減算以外の演算はどうでしょうか? (num * 0,5).toFixed(precision)は、最後の数値を切り捨てます。
追加された 著者 MCL,

丸めのkludgeが必要ない場合は、浮動小数点数を使用することはできず、小数点以下の算術ライブラリを見つける必要があります。私は恐れている。

2
追加された
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript