253

JavaScriptで数値を切り捨てるにはどうすればよいですか?

math.round()最も近い小数に丸めるため、機能しません。

最初のビットを保持する際に小数点で分割する以外に、より良い方法があるかどうかはわかりません。がなければならない...

4

11 に答える 11

451

使用Math.floor()は、これを行う 1 つの方法です。

詳細: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor

于 2009-09-16T23:08:05.437 に答える
65

負の無限大に向かって丸める -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()
于 2009-09-16T23:16:14.423 に答える
36

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 );
于 2009-09-16T23:15:47.717 に答える
23

特定の小数点以下の桁数に切り捨てる必要がある場合は、この関数を使用してみてください。

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
于 2014-02-13T16:47:09.997 に答える
10

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
于 2014-10-29T23:08:25.543 に答える
6

今日、他の誰かのコードをいじっていて、同様に切り捨てられているように見える以下を見つけました:

var dec = 12.3453465,
int = dec >> 0; // returns 12

Sign-propagating right shift(>>) の詳細については、MDN Bitwise Operatorsを参照してください。

これが何をしているのか理解するのにしばらく時間がかかりました:D

しかし、上で強調表示されているように、私の意見では、Math.floor() が機能し、読みやすくなっています。

于 2012-03-05T14:38:17.807 に答える
5
Math.floor(1+7/8)
于 2009-09-16T23:14:02.193 に答える