Подтвердить что ты не робот

Обрезать/округлить целое число в JavaScript?

Для script, я пишу, мне нужно отобразить число, округленное, но не десятичное или что-нибудь еще. Я дошел до того, чтобы округлить его до третьего места, но я не уверен, как это сделать, просто отбросив десятичную и все прошлое, так как это не похоже на то, что JavaScript имеет функцию substr, такую ​​как PHP.

Любые рекомендации?

4b9b3361

Ответ 1

Если у вас есть строка, проанализируйте ее как целое число:

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 является общим, и >>> 0 может использоваться для получения 32-разрядного целого без знака:

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

Ответ 2

Тревис Пессетто отвечал вместе с функцией mozey trunc2, были единственными правильными ответами, рассматривая, как JavaScript представляет очень маленькие или очень большие числа с плавающей запятой в научной нотации.

Например, parseInt(-2.2043642353916286e-15) не будет корректно разбирать этот ввод. Вместо возврата 0 он вернет -2.

Это правильный (и имхо наименее безумный) способ сделать это:

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

Ответ 3

Я добавлю свое решение здесь. Мы можем использовать пол, когда значения выше 0 и 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

Ответ 4

Преобразуйте число в строку и выбросите все после десятичной дроби.

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

trunc(-1.5) === -1

trunc(1.5) === 1

Редактировать 2013-07-10

Как указано в minitech, и, во-вторых, метод строк кажется немного чрезмерным. Итак, сравнивая различные методы, перечисленные здесь и в другом месте:

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. Строка работает плохо по сравнению с другими методами.

Ответ 6

Функция Math.trunc() удаляет все дробные цифры.

Для положительного числа он ведет себя точно так же, как Math.floor():

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

Для отрицательных чисел он ведет себя так же, как Math.ceil():

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