Как удалить десятичную часть из номера JavaScript?

У меня есть результаты деления, и я хочу отбросить десятичную часть результирующего числа.

Как я могу это сделать?

Ответ 1

Вы можете использовать...

... зависит от того, как вы хотите удалить десятичную.

Math.trunc() пока не поддерживается на всех платформах (а именно IE), но вы можете легко использовать polyfill тем временем.

Другим методом усечения дробной части с превосходной поддержкой платформы является использование побитового оператора (.e.g |0). Побочным эффектом использования побитового оператора на число является его операнд в виде 32-битного целого числа, поэтому удаление дробной составляющей. Имейте в виду, что это также приведет к искажению чисел более 32 бит.


Вы также можете говорить о неточности десятичного округления с арифметикой с плавающей запятой.

Требуемое чтение - что каждый компьютерный ученый должен знать о арифметике с плавающей точкой.

Ответ 2

Вы также можете сделать

parseInt(a/b)

Ответ 3

Вы также можете использовать побитовые операторы для усечения десятичного числа.

например

var x = 9 / 2;
console.log(x); // 4.5

x = ~~x;
console.log(x); // 4

x = -3.7
console.log(~~x) // -3
console.log(x | 0) // -3
console.log(x << 0) // -3

Побитовые операции значительно более эффективны, чем математические функции. Двойной небитовый оператор также, кажется, немного превосходит x | 0 x | 0 и x << 0 побитовых операций на незначительную величину.

// 952 milliseconds
for (var i = 0; i < 1000000; i++) {
    (i * 0.5) | 0;
}

// 1150 milliseconds
for (var i = 0; i < 1000000; i++) {
    (i * 0.5) << 0;
}

// 1284 milliseconds
for (var i = 0; i < 1000000; i++) {
    Math.trunc(i * 0.5);
}

// 939 milliseconds
for (var i = 0; i < 1000000; i++) {
    ~~(i * 0.5);
}

Также стоит отметить, что побитовый оператор not имеет приоритет над арифметическими операциями, поэтому вам может потребоваться заключить вычисления в скобки, чтобы получить ожидаемый результат:

x = -3.7

console.log(~~x * 2) // -6
console.log(x * 2 | 0) // -7
console.log(x * 2 << 0) // -7

console.log(~~(x * 2)) // -7
console.log(x * 2 | 0) // -7
console.log(x * 2 << 0) // -7

Дополнительную информацию о двойном побитовом операторе not можно найти в Double bitwise NOT (~~)

Ответ 4

Вы также можете показать определенное количество цифр после десятичной точки (здесь 2 цифры), используя следующий код:

var num = (15.46974).toFixed(2)
console.log(num) // 15.47
console.log(typeof num) // string

Ответ 5

Используйте Math.round().

(Алекс ответ лучше, я сделал предположение:)

Ответ 6

Используйте функцию Math.round().

Math.round(65.98) // will return 66 
Math.round(65.28) // will return 65

Ответ 7

С ES2015 доступен Math.trunc().

Math.trunc(2.3)                       // 2
Math.trunc(-2.3)                      // -2
Math.trunc(22222222222222222222222.3) // 2.2222222222222223e+22
Math.trunc("2.3")                     // 2
Math.trunc("two")                     // NaN
Math.trunc(NaN)                       // NaN

Он не поддерживается в IE11 или ниже, но работает в Edge и в любом другом современном браузере.

Ответ 8

Вот сжатие в подробном объяснении с помощью приведенных выше сообщений:

1. Math.trunc(): Он используется для удаления тех цифр, за которыми следует точка. Он преобразуется неявно. Но не поддерживается в IE.

Пример:

Math.trunc(10.5)//10

Math.trunc(-10.5)//-10

Другое Альтернативный способ: использование побитового оператора:

Пример:

x = 5.5

~~ x//5

2. Math.floor(): Используется для обеспечения минимального целочисленного значения. Он поддерживается во всех браузерах.

Пример:

Math.floor(10.5)//10

Math.floor(-10.5)//-11

3. Math.ceil():. Он используется, чтобы дать наивысшее целочисленное значение. Он поддерживается во всех браузерах.

Пример:

Math.ceil(10.5)//11

Math.ceil(-10.5)//-10

4. Math.round(): округляется до ближайшего целого числа. Он поддерживается во всех браузерах.

Пример:

Math.round(10.5)//11

Math.round(-10.5)//-10

Math.round(10.49)//10

Math.round(-10.51)//-11

Ответ 9

toFixed будет вести себя как round.

Для пола, такого как поведение, используйте%:

var num = 3.834234;
var floored_num = num - (num % 1); // floored_num will be 3

Ответ 10

Для реализации ES6 используйте что-то вроде следующего:

const millisToMinutesAndSeconds = (millis) => {
  const minutes = Math.floor(millis / 60000);
  const seconds = ((millis % 60000) / 1000).toFixed(0);
  return `${minutes}:${seconds < 10 ? '0' : ''}${seconds}`;
}

Ответ 11

Это для тех, кто хочет запретить пользователям вводить десятичные числа

<input id="myInput" onkeyup="doSomething()" type="number" />

<script>
    function doSomething() {

        var intNum = $('#myInput').val();

        if (!Number.isInteger(intNum)) {
            intNum = Math.round(intNum);
        }

        console.log(intNum);
    }
</script>

Ответ 12

Если вы не заботитесь о маршрутизации, просто преобразуйте число в строку, а затем удалите все после периода, включая период. Это работает независимо от того, есть ли десятичное число или нет.

const sEpoch = ((+new Date()) / 1000).toString();
const formattedEpoch = sEpoch.split('.')[0];