Отделение десятичной части числа в JavaScript: Math.floor и %
Быстрый ответ
Для выделения десятичной части числа нужно вычесть из него его целую часть. Используйте Math.floor()
для положительных чисел и Math.ceil()
для отрицательных. Вот несколько примеров:
const num = 123.456;
const decimalPart = num – Math.floor(num);
console.log(decimalPart); // Выведет: 0.456
const negativeNum = -123.456;
const negativeDecimalPart = Math.abs(negativeNum) – Math.floor(Math.abs(negativeNum));
console.log(negativeDecimalPart); // Выведет: 0.456
Детально о выделении десятичной части
Формула num – Math.floor(num)
обеспечивает высокую точность и является более предпочтительной, чем метод num % 1
. Однако необходима осторожность: в работе с вещественными числами возможны ошибки из-за их неточного представления.
Отрицательные числа: как с ними обращаться
Работая с отрицательными числами, важно делимое изначально привести к абсолютному значению при помощи Math.abs(negativeNum)
. Вот так:
const negativeNum = -123.456;
const decimalPart = Math.abs(negativeNum) – Math.floor(Math.abs(negativeNum));
console.log(decimalPart); // Выведет: 0.456
Строковый метод для магов JS
Можно к числу применить метод toString()
, затем разделить строку по точке с помощью метода split(".")
:
const num = 123.456;
const decimalsAsString = (num.toString().split(".")[1] || "0");
console.log(decimalsAsString); // Выведет: "456"
Контроль точности: Берегите вещественные числа
Метод toFixed()
позволяет ограничить количество десятичных знаков. Но он возвращает значение в виде строки, поэтому требуется преобразование обратно в число:
const num = 123.456;
const fixedDecimals = Number((num % 1).toFixed(2));
console.log(fixedDecimals); // Выведет: 0.46
Учтите возможное округление результата.
Избегайте спотыкания об неявные ошибки
Вещественные числа могут подвести:
const num = 0.1 + 0.2;
const decimalPart = num – Math.floor(num);
console.log(decimalPart); // Здесь что-то не так...
Для работы с высокой точностью рекомендуется использовать специализированные библиотеки, например, BigDecimal.
Визуализация
Попробуем представить дробные числа простым и понятным образом:
let decimalSlice = (3.14159 – Math.floor(3.14159)).toFixed(5);
console.log(decimalSlice); // Выведет: "0.14159"
Вот так мы отрезали от пиццы кусочек, равный десятичной части числа!
Дополнительные навыки
Держите свои математические инструменты в готовности!
Math.trunc()
также эффективно обрезает десятичную часть числа:
const num = 123.456;
const decimalPart = num – Math.trunc(num);
console.log(decimalPart); // Выведет: 0.456
Обработка частных случаев
Особенные ситуации, типа числа 0.9999999999999
, требуют особого внимания:
const num = 0.9999999999999;
const decimalPart = num – Math.floor(num);
console.log(decimalPart.toPrecision(12)); // Здесь что-то не так...
Работа с числами – это не всегда весело
При выполнении сложных финансовых операций, где важна высокая точность, применяйте целочисленную арифметику, предварительно масштабируя дробные числа.
Полезные материалы
- parseFloat() – JavaScript | MDN — подробнее о функции parseFloat для преобразования строк в числа.
- Number.prototype.toFixed() – JavaScript | MDN — подробное использование метода toFixed.
- javascript – How do I check that a number is float or integer? – Stack Overflow — как отличить вещественные числа от целых.
- Методы чисел в JavaScript — обзор методов чисел в JavaScript.
- Number.prototype.toString() – JavaScript | MDN — применение метода toString для работы с числами как со строками.
- Спецификация языка ECMAScript® 2024 — официальная спецификация JavaScript, раздел про объекты Number.