Math.trunc() просто удаляет дробную часть числа.
Это один из самых понятных способов быстро получить целую часть без округления вверх или вниз.
Синтаксис
Math.trunc(x)
x - число, у которого нужно отбросить дробную часть.
Что делает Math.trunc()
Метод возвращает число без дробной части.
console.log(Math.trunc(4.9)); // 4
console.log(Math.trunc(4.1)); // 4
console.log(Math.trunc(4)); // 4
Главное здесь то, что Math.trunc() не округляет, а именно отрезает всё после точки.
Что возвращает Math.trunc()
Math.trunc() возвращает число типа number.
const result = Math.trunc(12.7);
console.log(result); // 12
console.log(typeof result); // "number"
Это именно число, а не строка.
Отрицательные числа
Вот здесь и видно главное отличие от Math.floor().
console.log(Math.trunc(-4.1)); // -4
console.log(Math.trunc(-4.9)); // -4
Метод просто убирает дробную часть и не пытается двигаться к -Infinity или +Infinity.
Math.trunc() и Math.floor()
Эти методы часто путают.
console.log(Math.trunc(4.9)); // 4
console.log(Math.floor(4.9)); // 4
console.log(Math.trunc(-4.9)); // -4
console.log(Math.floor(-4.9)); // -5
На положительных числах результат часто одинаковый.
На отрицательных разница становится принципиальной:
Math.trunc()просто отбрасывает дробную частьMath.floor()идёт вниз к-Infinity
Math.trunc() и Math.ceil()
Math.ceil() делает совсем другое.
console.log(Math.trunc(4.9)); // 4
console.log(Math.ceil(4.9)); // 5
Math.trunc()убирает дробную частьMath.ceil()идёт вверх к+Infinity
Math.trunc() и Math.round()
Math.round() тоже не то же самое.
console.log(Math.trunc(4.9)); // 4
console.log(Math.round(4.9)); // 5
Math.trunc()ничего не округляетMath.round()выбирает ближайшее целое
Нюанс с -0
В некоторых случаях Math.trunc() может вернуть -0.
console.log(Math.trunc(-0.1)); // -0
Обычно в выводе это выглядит как 0, но технически это отдельное значение.
Проверить можно так:
console.log(Object.is(Math.trunc(-0.1), -0)); // true
Для большинства обычных задач этот нюанс не мешает, но знать о нём полезно.
Неявное приведение типов
Math.trunc() сначала пытается привести аргумент к числу.
console.log(Math.trunc("4.9")); // 4
console.log(Math.trunc(null)); // 0
console.log(Math.trunc(true)); // 1
console.log(Math.trunc(undefined)); // NaN
На практике обычно лучше передавать в метод уже готовое число.
NaN и Infinity
Для специальных значений метод ведёт себя предсказуемо.
console.log(Math.trunc(NaN)); // NaN
console.log(Math.trunc(Infinity)); // Infinity
console.log(Math.trunc(-Infinity)); // -Infinity
Число не меняется
Math.trunc() не изменяет исходное значение. Он только возвращает новый результат.
const value = 3.7;
const truncated = Math.trunc(value);
console.log(value); // 3.7
console.log(truncated); // 3
Когда это полезно
Math.trunc() удобно использовать, когда:
- нужно просто отбросить дробную часть
- не требуется математическое округление
- важно сохранить поведение одинаковым по смыслу для положительных и отрицательных чисел
Пример:
const value = 12.99;
console.log(Math.trunc(value)); // 12
Частые ошибки
Путать Math.trunc() и Math.floor()
console.log(Math.trunc(-4.9)); // -4
console.log(Math.floor(-4.9)); // -5
Это самая частая ошибка, особенно на отрицательных числах.
Думать, что метод округляет
console.log(Math.trunc(4.9)); // 4
Метод не округляет, а просто отбрасывает дробную часть.
Забывать про -0
console.log(Math.trunc(-0.1)); // -0
Обычно это не мешает, но в редких случаях может всплыть при точных сравнениях.
Быстрая памятка
Math.trunc()удаляет дробную часть числа- метод возвращает
number - он не округляет вверх или вниз
- на отрицательных числах это особенно отличает его от
Math.floor() - в некоторых случаях результатом может быть
-0 - это не то же самое, что
Math.floor(),Math.ceil()иMath.round()
Коротко
Math.trunc() - это удобный способ просто отбросить дробную часть числа в JavaScript. Главное, что стоит запомнить: метод не округляет, и именно поэтому на отрицательных числах он заметно отличается от Math.floor().