Отделение десятичной части числа в JavaScript: Math.floor и %

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для выделения десятичной части числа нужно вычесть из него его целую часть. Используйте Math.floor() для положительных чисел и Math.ceil() для отрицательных. Вот несколько примеров:

JS
Скопировать код
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
Кинга Идем в IT: пошаговый план для смены профессии

Детально о выделении десятичной части

Формула num – Math.floor(num) обеспечивает высокую точность и является более предпочтительной, чем метод num % 1. Однако необходима осторожность: в работе с вещественными числами возможны ошибки из-за их неточного представления.

Отрицательные числа: как с ними обращаться

Работая с отрицательными числами, важно делимое изначально привести к абсолютному значению при помощи Math.abs(negativeNum). Вот так:

JS
Скопировать код
const negativeNum = -123.456;
const decimalPart = Math.abs(negativeNum) – Math.floor(Math.abs(negativeNum));
console.log(decimalPart); // Выведет: 0.456

Строковый метод для магов JS

Можно к числу применить метод toString(), затем разделить строку по точке с помощью метода split("."):

JS
Скопировать код
const num = 123.456;
const decimalsAsString = (num.toString().split(".")[1] || "0");
console.log(decimalsAsString); // Выведет: "456"

Контроль точности: Берегите вещественные числа

Метод toFixed() позволяет ограничить количество десятичных знаков. Но он возвращает значение в виде строки, поэтому требуется преобразование обратно в число:

JS
Скопировать код
const num = 123.456;
const fixedDecimals = Number((num % 1).toFixed(2));
console.log(fixedDecimals); // Выведет: 0.46

Учтите возможное округление результата.

Избегайте спотыкания об неявные ошибки

Вещественные числа могут подвести:

JS
Скопировать код
const num = 0.1 + 0.2;
const decimalPart = num – Math.floor(num); 
console.log(decimalPart); // Здесь что-то не так...

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

Визуализация

Попробуем представить дробные числа простым и понятным образом:

JS
Скопировать код
let decimalSlice = (3.14159 – Math.floor(3.14159)).toFixed(5);
console.log(decimalSlice); // Выведет: "0.14159"

Вот так мы отрезали от пиццы кусочек, равный десятичной части числа!

Дополнительные навыки

Держите свои математические инструменты в готовности!

Math.trunc() также эффективно обрезает десятичную часть числа:

JS
Скопировать код
const num = 123.456;
const decimalPart = num – Math.trunc(num);
console.log(decimalPart); // Выведет: 0.456

Обработка частных случаев

Особенные ситуации, типа числа 0.9999999999999, требуют особого внимания:

JS
Скопировать код
const num = 0.9999999999999;
const decimalPart = num – Math.floor(num);
console.log(decimalPart.toPrecision(12)); // Здесь что-то не так...

Работа с числами – это не всегда весело

При выполнении сложных финансовых операций, где важна высокая точность, применяйте целочисленную арифметику, предварительно масштабируя дробные числа.

Полезные материалы

  1. parseFloat() – JavaScript | MDN — подробнее о функции parseFloat для преобразования строк в числа.
  2. Number.prototype.toFixed() – JavaScript | MDN — подробное использование метода toFixed.
  3. javascript – How do I check that a number is float or integer? – Stack Overflow — как отличить вещественные числа от целых.
  4. Методы чисел в JavaScript — обзор методов чисел в JavaScript.
  5. Number.prototype.toString() – JavaScript | MDN — применение метода toString для работы с числами как со строками.
  6. Спецификация языка ECMAScript® 2024 — официальная спецификация JavaScript, раздел про объекты Number.