数値を小数点以下2桁に修正しようとしています。そのためtoFixed
に、javascriptの機能を使用しています。以下は、私が得ている奇妙な結果です。確認して助けてください。
変数番号 = 11.995; number.toFixed(2); //正しい 11.99 が表示されます 変数番号 = 19.995; number.toFixed(2); //間違っている 20.00 を返します
なぜそれが起こっているのか誰にも教えてもらえますか。
ご協力いただきありがとうございます。
数値を小数点以下2桁に修正しようとしています。そのためtoFixed
に、javascriptの機能を使用しています。以下は、私が得ている奇妙な結果です。確認して助けてください。
変数番号 = 11.995; number.toFixed(2); //正しい 11.99 が表示されます 変数番号 = 19.995; number.toFixed(2); //間違っている 20.00 を返します
なぜそれが起こっているのか誰にも教えてもらえますか。
ご協力いただきありがとうございます。
これが浮動小数点演算の仕組みです。値19.995は、正確な2進数(基数2)ではありません。より明確にするために、10/3を割るときの正確な数を考えてください。
詳細な説明については、次をお読みください:http: //docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
あなたの場合、代わりに文字列を扱うことができます(少なくともそれはあなたが望むもののようです):
number.toString().substr(0, n);
または、次のような関数を定義します(2分で作成、単なる例):
Number.toFixed = function(no, n) {
var spl = no.toString().split('.');
if ( spl.length > 1 ) {
return spl[0]+'.'+spl[1].substr(0,n);
}
return spl[0];
}
Number.toFixed(19.995, 2); // 19.99
私は私のためにすべてを行った関数を作成しました..
function toFixed(number, precision) {
var multiplier = Math.pow(10, precision + 1),
wholeNumber = Math.floor(number * multiplier);
return Math.round(wholeNumber / 10) * 10 / multiplier;
}
//Call this function to retrive exect value
toFixed((+adjustmentval), 2);
toFixed
値を丸めます。19.995 は 19.99 と 20.00 の丁度中間であるため、どちらかを選択する必要があります。伝統的に、丸めは偶数の結果を優先します (これにより、切り上げと切り下げが等しくなるため、偏りが防止されます)。
デビッドは私が推測しているあなたの疑問に答えました. ここで代替ソリューションを提供するだけです。
Math.floor()
これには Math オブジェクトのメソッドを使用できます。
このようなもの、Math.floor(number*100)/100