私は 137.57667565656 のような浮動小数点数を持っていますが、新しい浮動小数点数が 137.58 になるように、小数点以下の桁数が 2 桁になるように丸めたいと考えています。
私はこれまでにこれを試しました:
(Math.round((value*100)/100)).toFixed(2).toString();
しかし、残念ながら、私の値は 137.00 に丸められます。小数点以下の桁数をゼロとして追加するのはなぜですか?
上記を達成するにはどうすればよいですか?
私は 137.57667565656 のような浮動小数点数を持っていますが、新しい浮動小数点数が 137.58 になるように、小数点以下の桁数が 2 桁になるように丸めたいと考えています。
私はこれまでにこれを試しました:
(Math.round((value*100)/100)).toFixed(2).toString();
しかし、残念ながら、私の値は 137.00 に丸められます。小数点以下の桁数をゼロとして追加するのはなぜですか?
上記を達成するにはどうすればよいですか?
何を期待していましたか?
(value*100)/100
value の元の値を返すだけなので、
Math.round((value*100)/100))
以下と同じです:
Math.round(value)
次に、次のものがあります。
Math.round(value).toFixed(2).toString();
したがって、値は整数に丸められ、toFixedは小数点以下 2 桁を追加して文字列を返すため、toString部分は冗長になります。値を小数点以下 4 桁に丸めたい場合は、次のようにします。
value.toFixed(4)
仕事をします:
var x = 137.57667565656;
console.log(x.toFixed(4)); // 137.5767
2 桁に四捨五入したいが、4 桁として表示する場合は、次のようにします。
Number(x.toFixed(2)).toFixed(4) // 137.5800
4つだけでなく、すべての有効数字で機能するより簡単な答えがあります。JavaScript には、数値を有効桁数で表す文字列を返す組み込み関数が用意されています。 Number.toPrecision()
var value = 137.57667565656;
var strVal = value.toPrecision(4);
>> 137.6
この投稿では、有効数字について多くの誤解がありました。ウィキペディアを参照して、記憶をリフレッシュしてください。元の方法が間違っていた理由については、@RobG の回答を参照してください。
編集どうやら私は質問を誤解しました。私が答えようとしたとき、それは(少なくともタイトルでは)有効数字に関するものでした。
この回答は、ウィキペディアの有効数字の定義と一致しています。これは、3 つのステップで、任意の有効桁数の一般的な問題を解決します。
-1<x<1
、たとえば 12345 の場合は 5、0.01 の場合は -2)それだけです。有効数字のないゼロを除いて。(有効数字3桁で「0.00」としましたが、0でも0.0でもいいです)
function toStringWithSignificantDigits( x, len ){
if(x==0) return x.toFixed(len-1); // makes little sense for 0
var numDigits = Math.ceil(Math.log10(Math.abs(x)));
var rounded = Math.round(x*Math.pow(10,len-numDigits))*Math.pow(10,numDigits-len);
return rounded.toFixed(Math.max(len-numDigits,0));
}
function testIt(x,len){
console.log( "format " + x + " to " + len + " significant digits: " + toStringWithSignificantDigits(x,len));
}
testIt(12.345,6); // 12.3450
testIt(12.345,5); // 12.345
testIt(12.345,4); // 12.35
testIt(12.345,3); // 12.3
testIt(12.345,2); // 12
testIt(12.345,1); // 10
testIt(0.012345,7); // 0.01234500
testIt(0.012345,6); // 0.0123450
testIt(0.012345,5); // 0.012345
testIt(0.012345,4); // 0.01235
testIt(0.012345,3); // 0.0123
testIt(0.012345,2); // 0.012
testIt(0.012345,1); // 0.01
testIt(0,3); // 0.00, zero is a special case, as it has no significant digit