JavaScriptで数値を切り捨てるにはどうすればよいですか?
math.round()
最も近い小数に丸めるため、機能しません。
最初のビットを保持する際に小数点で分割する以外に、より良い方法があるかどうかはわかりません。がなければならない...
JavaScriptで数値を切り捨てるにはどうすればよいですか?
math.round()
最も近い小数に丸めるため、機能しません。
最初のビットを保持する際に小数点で分割する以外に、より良い方法があるかどうかはわかりません。がなければならない...
使用Math.floor()
は、これを行う 1 つの方法です。
詳細: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor
負の無限大に向かって丸める -Math.floor()
+3.5 => +3.0
-3.5 => -4.0
ゼロ方向への丸めは、 を使用して実行できますMath.trunc()
。古いブラウザはこの機能をサポートしていません。これらをサポートする必要がある場合はMath.ceil()
、負の数とMath.floor()
正の数に使用できます。
+3.5 => +3.0 using Math.floor()
-3.5 => -3.0 using Math.ceil()
Math.floor()
動作しますが、ビットごとの操作を使用する場合と比較して非常に遅いOR
です:
var rounded = 34.923 | 0;
alert( rounded );
//alerts "34"
EDIT Math.floor()
は| を使用するより遅くはありません。オペレーター。私の仕事をチェックしてくれた Jason S に感謝します。
テストに使用したコードは次のとおりです。
var a = [];
var time = new Date().getTime();
for( i = 0; i < 100000; i++ ) {
//a.push( Math.random() * 100000 | 0 );
a.push( Math.floor( Math.random() * 100000 ) );
}
var elapsed = new Date().getTime() - time;
alert( "elapsed time: " + elapsed );
特定の小数点以下の桁数に切り捨てる必要がある場合は、この関数を使用してみてください。
function roundDown(number, decimals) {
decimals = decimals || 0;
return ( Math.floor( number * Math.pow(10, decimals) ) / Math.pow(10, decimals) );
}
例
alert(roundDown(999.999999)); // 999
alert(roundDown(999.999999, 3)); // 999.999
alert(roundDown(999.999999, -1)); // 990
a の丸め(別名「小数部分の切り捨て」) は、符号付き小数部分を減算number
する0
ことで実行できます。number % 1
rounded = number - number % 1;
Math.floor
( に向かって丸めます)のよう-Infinity
に、この方法は完全に正確です。
-0
と の処理には違いがありますが+Infinity
、次の-Infinity
とおりです。
Math.floor(-0) => -0
-0 - -0 % 1 => +0
Math.floor(Infinity) => Infinity
Infinity - Infinity % 1 => NaN
Math.floor(-Infinity) => -Infinity
-Infinity - -Infinity % 1 => NaN
今日、他の誰かのコードをいじっていて、同様に切り捨てられているように見える以下を見つけました:
var dec = 12.3453465,
int = dec >> 0; // returns 12
Sign-propagating right shift(>>) の詳細については、MDN Bitwise Operatorsを参照してください。
これが何をしているのか理解するのにしばらく時間がかかりました:D
しかし、上で強調表示されているように、私の意見では、Math.floor() が機能し、読みやすくなっています。
Math.floor(1+7/8)