2

小数 (価格) を丸めるために、かなり長い間 .toFixed(2) を使用してきました。しかし、最近、Javascript が小数を「正確に」四捨五入できないことを発見しました。10.005 でさえ 10.01 に正しく丸められないことに少しショックを受けました。10.00 に切り捨てられました。また、正しく丸められた場合もあります。私は自分のコードを制御したいので、これは私にとって大きな問題です。

そして、私は価格を計算しているので、2 桁または 3 桁の数値、おそらく 4 桁の数値のみを丸めるには、もっと (100%) 正確なものが必要だと思います。

JavaScriptで基本的な丸めを行う簡単な方法、正しい方法はありませんか?

更新: Felix Kling が提案したように、私の価格をセントの整数として処理する方法には、(より多くのコードに加えて) 欠点もありますか?

4

2 に答える 2

1

10.005 のような数値を正確に丸めることができない理由は、実際には 10.005 という数値がなく、倍精度浮動小数点変数を使用して表現できる最も近い数値しかないためです。

実際の数値は 10.00499999999276253 のようなもので、10.01 ではなく 10.00 に自然に丸められます。

金額を処理するには、値を正確に表すことができるデータ型を使用する必要があります。Javascript の数値は常に浮動小数点数であるため、残っているのは、数値をテキストとして表現し、独自の関数を記述して計算を行うことです (または、既にそれを行っている人を見つけます)。

于 2012-10-07T11:11:21.627 に答える
0

これはあなたのために働くはずです、これはそれで遊ぶためのフィドルですhttp://jsfiddle.net/5ffyC/1/

function moneyRound(flt){
   var splitStr = flt.toString().split('.'),
      whole = (flt * 100) | 0;

   if (splitStr.length > 1  && splitStr[1].length > 2){
      return splitStr[1][2] > 4? (whole + 1) / 100: whole / 100;
   } else {
      return flt;   
   }
}
于 2012-10-07T13:34:58.117 に答える