2

toString() 組み込み関数からの本当に奇妙な出力結果があります

これが私のコードです:

function strangeFunction(num)
{
return num.toString();
}


alert( strangeFunction(121.112*100) ); //output: 12111.199999999999 
alert( strangeFunction(.1*100) );  //output: 10 
alert( strangeFunction(1.33*100) ); //output: 133
alert( strangeFunction(133.33*100) ); //output: 13333.000000000002 
alert( strangeFunction(133.33*100) );//output: 13334 

http://jsfiddle.net/sVMf4/

その問題を解決する方法について何か提案はありますか? ある種のバグまたは数値のフォーマットの問題があるようです。

4

4 に答える 4

1

これは JavaScript だけではなく、浮動小数点値を操作する事実上すべての言語にこの問題があります。

これを回避するには、Math.round()またはを使用できます.toFixed()

Math.round(123.456);
// returns 123

123.4.toFixed(2);
// returns "123.40"

もありますが、しばしば望まれない.toPrecision()科学表記法 ( など) を使用することを決定する場合があります。1.2e+2

于 2013-10-14T11:21:25.097 に答える
0

これは、浮動小数点数が内部的に保存される方法が原因です。必要な精度について確信がある場合は、これを試すことができます。

function strangeFunction(num)
{
    return parseFloat(num.toPrecision(12)).toString();
}
于 2013-10-14T11:21:52.927 に答える
0

これを試すことができます:

function numToStr(var number, var dec) {
    return number.toFixed(dec);
}

var number = 121.112*100;

alert(numToStr(number , 0));  

出力:

12111

toFixed()を使用すると、指定された小数点以下の桁数を維持しながら、数値を文字列に変換できます。

于 2013-10-14T11:15:45.760 に答える
0

古いJavaScriptの問題のようです:

JavaScriptで浮動小数点数の精度を処理するには?

別の可能な解決策:

function strangeFunction(num)
{
    num = Math.round(num); 
    return num.toString();
}
于 2013-10-14T11:16:52.790 に答える