Как я могу удалить десятичную часть из числа JavaScript?
У меня есть результаты деления, и я хочу отбросить десятичную часть полученного числа.
Как я могу это сделать?
16 ответов
Вы могли бы использовать...
Math.trunc()
(усеченная дробная часть, также см. ниже)Math.floor()
(округлить вниз)Math.ceil()
(округлять)Math.round()
(округление до ближайшего целого)
... зависит от того, как вы хотели удалить десятичную.
Math.trunc()
пока не поддерживается на всех платформах (а именно IE), но вы можете легко использовать polyfill.
Еще один метод усечения дробной части с отличной поддержкой платформы - использование побитового оператора (.eg |0
). Побочный эффект использования побитового оператора для числа состоит в том, что он будет рассматривать свой операнд как 32-разрядное целое число со знаком, поэтому удаляя дробный компонент. Имейте в виду, что это также будет искажать числа больше 32 бит.
Вы также можете говорить о неточности десятичного округления с арифметикой с плавающей запятой.
Обязательное чтение - Что должен знать каждый компьютерщик об арифметике с плавающей точкой.
Вы также можете использовать побитовые операторы для усечения десятичного числа.
например
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
побитовые операции на незначительную сумму.
// 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 (~~)
Например:
var x = 9.656;
x.toFixed(0); // returns 10
x.toFixed(2); // returns 9.66
x.toFixed(4); // returns 9.6560
x.toFixed(6); // returns 9.656000
или
parseInt("10"); // returns 10
parseInt("10.33"); // returns 10
parseInt("10 20 30"); // returns 10
parseInt("10 years"); // returns 10
parseInt("years 10"); // returns NaN
Вы также можете показать определенное количество цифр после десятичной точки (здесь 2 цифры), используя следующий код:
var num = (15.46974).toFixed(2)
console.log(num) // 15.47
console.log(typeof num) // string
Использование Math.round()
функция.
Math.round(65.98) // will return 66
Math.round(65.28) // will return 65
Использование Math.round()
,
(Ответ Алекса лучше; я сделал предположение:)
С 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 и любом другом современном браузере.
Math.trunc()
и
~~
Удалить
decimal part
без какого-либо влияния на
integer part
.
Например:
console.log(Math.trunc(3.9)) // 3
console.log(~~(3.9)) // 3
Вот подробное объяснение с помощью вышеприведенных постов:
1. Math.trunc (): используется для удаления тех цифр, за которыми следует точка. Он конвертируется неявно. Но не поддерживается в IE.
Пример:
Math.trunc (10.5) // 10
Math.trunc (-10,5) // -10
Другой альтернативный способ: использование побитового оператора not:
Пример:
х = 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(0), чтобы удалить всю десятичную часть или указать число в аргументах, до которого вы хотите, чтобы десятичная дробь была усечена.
Примечание: toFixed преобразует число в строку.
Если вы не заботитесь о маршрутизации, просто преобразуйте число в строку, а затем удалите все после периода, включая период. Это работает независимо от того, есть ли десятичное число или нет.
const sEpoch = ((+new Date()) / 1000).toString();
const formattedEpoch = sEpoch.split('.')[0];
toFixed будет вести себя как раунд.
Для поведения, подобного полу, используйте%:
var num = 3.834234;
var floored_num = num - (num % 1); // floored_num will be 3
Это для тех, кто хочет запретить пользователям вводить десятичные числа
<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>
Для реализации ES6 используйте что-то вроде следующего:
const millisToMinutesAndSeconds = (millis) => {
const minutes = Math.floor(millis / 60000);
const seconds = ((millis % 60000) / 1000).toFixed(0);
return `${minutes}:${seconds < 10 ? '0' : ''}${seconds}`;
}
В этом примере я используюNumber.toFixed
иMath.trunc
методы:
const num = 1.234
Number(num.toFixed(0)); // Returns 1
Number(num.toFixed(2)); // Returns 1.23
Math.trunc(num); // Returns 1
The toFixed()
Метод форматирует число, используя запись с фиксированной точкой. Math.trunc()
статический метод возвращает целую часть числа, удаляя любые дробные цифры.