У меня есть результаты деления, и я хочу отбросить десятичную часть результирующего числа.
Как я могу это сделать?
У меня есть результаты деления, и я хочу отбросить десятичную часть результирующего числа.
Как я могу это сделать?
Вы можете использовать...
Math.trunc()
(обрезать дробную часть, также см. ниже)Math.floor()
(округлить)Math.ceil()
(округлить)Math.round()
(округление до ближайшего целого)... зависит от того, как вы хотите удалить десятичную.
Math.trunc()
пока не поддерживается на всех платформах (а именно IE), но вы можете легко использовать polyfill тем временем.
Другим методом усечения дробной части с превосходной поддержкой платформы является использование побитового оператора (.e.g |0
). Побочным эффектом использования побитового оператора на число является его операнд в виде 32-битного целого числа, поэтому удаление дробной составляющей. Имейте в виду, что это также приведет к искажению чисел более 32 бит.
Вы также можете говорить о неточности десятичного округления с арифметикой с плавающей запятой.
Требуемое чтение - что каждый компьютерный ученый должен знать о арифметике с плавающей точкой.
Вы также можете сделать
parseInt(a/b)
Вы также можете использовать побитовые операторы для усечения десятичного числа.
например
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 (~~)
Вы также можете показать определенное количество цифр после десятичной точки (здесь 2 цифры), используя следующий код:
var num = (15.46974).toFixed(2)
console.log(num) // 15.47
console.log(typeof num) // string
Используйте Math.round()
.
(Алекс ответ лучше, я сделал предположение:)
Используйте функцию Math.round()
.
Math.round(65.98) // will return 66
Math.round(65.28) // will return 65
С 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 и в любом другом современном браузере.
Вот сжатие в подробном объяснении с помощью приведенных выше сообщений:
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
toFixed будет вести себя как round.
Для пола, такого как поведение, используйте%:
var num = 3.834234;
var floored_num = num - (num % 1); // floored_num will be 3
Для реализации ES6 используйте что-то вроде следующего:
const millisToMinutesAndSeconds = (millis) => {
const minutes = Math.floor(millis / 60000);
const seconds = ((millis % 60000) / 1000).toFixed(0);
return `${minutes}:${seconds < 10 ? '0' : ''}${seconds}`;
}
Это для тех, кто хочет запретить пользователям вводить десятичные числа
<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>
Если вы не заботитесь о маршрутизации, просто преобразуйте число в строку, а затем удалите все после периода, включая период. Это работает независимо от того, есть ли десятичное число или нет.
const sEpoch = ((+new Date()) / 1000).toString();
const formattedEpoch = sEpoch.split('.')[0];