web-dev-qa-db-ja.com

JavaScriptで整数を切り捨て/丸めますか?

私が書いているスクリプトの場合、丸められた数値を表示する必要がありますが、小数やそれ以降の数値は表示されません。 3位に丸めることになりましたが、JavaScriptに_のようなsubstr関数があるとは思えないため、小数点以下をすべて削除する方法がわかりません。PHPします。

推奨事項はありますか?

61
Eric

文字列がある場合、整数として解析します。

var num = '20.536';
var result = parseInt(num, 10);  // 20

数字を持っている場合、ECMAScript 6はMath.truncを提供し、Firefox 24以降とEdgeですでに利用可能な完全に一貫した切り捨てを行います。

var num = -2147483649.536;
var result = Math.trunc(num);  // -2147483649

それに頼ることができず、常に正の数を持っている場合は、もちろんMath.floorを使用できます:

var num = 20.536;
var result = Math.floor(num);  // 20

最後に、[-2147483648、2147483647]に数値がある場合、ビット演算子を使用して32ビットに切り捨てることができます。 | 0は一般的であり、>>> 0を使用して符号なし32ビット整数を取得できます。

var num = -20.536;
var result = num | 0;  // -20
123
Ry-

JavaScriptが科学表記法で非常に小さいまたは非常に大きい浮動小数点数を表す方法を考慮すると、travis Pessettoの答えとmozeyのtrunc2関数が唯一の正しい答えでした。

たとえば、parseInt(-2.2043642353916286e-15)はその入力を正しく解析しません。 0を返す代わりに、-2を返します。

これはそれを行う正しい(そして最も狂気のない)方法です:

function truncate(number)
{
    return number > 0
         ? Math.floor(number)
         : Math.ceil(number);
}
16
BlinkyTop

ここにソリューションを追加します。値が0より大きい場合はfloorを、ゼロより小さい場合はceilを使用できます。

function truncateToInt(x)
{
    if(x > 0)
    {
         return Math.floor(x);
    }
    else
    {
         return Math.ceil(x);
    }
 }

次に:

y = truncateToInt(2.9999); // results in 2
y = truncateToInt(-3.118); //results in -3
14
Travis Pessetto

数値を文字列に変換し、小数点以下をすべて捨てます。

trunc = function(n) { return Number(String(n).replace(/\..*/, "")) }

trunc(-1.5) === -1

trunc(1.5) === 1

2013-07-10を編集

ミニテックが指摘したように、2番目に考えたとき、ストリング方式は少し過剰に思えます。したがって、ここと他の場所にリストされているさまざまな方法を比較します。

function trunc1(n){ return parseInt(n, 10); }
function trunc2(n){ return n - n % 1; }
function trunc3(n) { return Math[n > 0 ? "floor" : "ceil"](n); }
function trunc4(n) { return Number(String(n).replace(/\..*/, "")); }

function getRandomNumber() { return Math.random() * 10; }

function test(func, desc) {
    var t1, t2;
    var ave = 0;
    for (var k = 0; k < 10; k++) {
        t1 = new Date().getTime();
        for (var i = 0; i < 1000000; i++) {
            window[func](getRandomNumber());
        }
        t2 = new Date().getTime();
        ave += t2 - t1;
    }
    console.info(desc + " => " + (ave / 10));
}

test("trunc1", "parseInt");
test("trunc2", "mod");
test("trunc3", "Math");
test("trunc4", "String");

結果は、ハードウェアによって異なる場合がありますが、次のとおりです。

parseInt => 258.7
mod      => 246.2
Math     => 243.8
String   => 1373.1

Math.floor/ceilメソッドは、parseIntやmodよりもわずかに高速です。文字列は、他のメソッドと比較してパフォーマンスが低下します。

9
mozey

Math.floor() を使用します。

var f = 20.536;
var i = Math.floor(f);  // 20

http://jsfiddle.net/J4UVV/1/

2
gilly3

Math.trunc()関数は、すべての小数桁を削除します。

正の数の場合、Math.floor()とまったく同じように動作します。

console.log(Math.trunc(89.13349)); // output is 89

負の数の場合、Math.ceil()と同じように動作します。

console.log(Math.trunc(-89.13349)); //output is -89
0
Asad Manzoor