Округление чисел в JavaScript: почему .toFixed() возвращает строку

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

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

Для округления числа с получением числового результата используйте Math.round():

JS
Скопировать код
let roundedNumber = Math.round(yourNumber * Math.pow(10, decimalPlaces)) / Math.pow(10, decimalPlaces);

В качестве примера рассмотрим число 2.345, округлённое до двух знаков после запятой:

JS
Скопировать код
let roundedNumber = Math.round(2.345 * 100) / 100; // Получим 2.35

Таким образом вы получите число, а не строку.

Разбор числовых данных: справочник по округлению

Учитывайте данные особенности. Округление чисел в JavaScript имеет важные нюансы, которые мы постепенно проанализируем.

Округление целых чисел: простота – залог успешного результата

В случаях, когда требуется округлить число до целого, используйте:

JS
Скопировать код
let cleanInteger = Math.round(yourNumber); // Округляем до ближайшего целого

Быстрое преобразование: уверенный подход

Вы всегда можете превратить строку, полученную от .toFixed(), обратно в число:

JS
Скопировать код
let fitNumber = +yourNumber.toFixed(2); // Используйте унарный плюс

Его альтернатива:

JS
Скопировать код
let transformedNumber = Number(yourNumber.toFixed(2)); // Или примените конструктор Number

Точное округление: инструкция для стремящихся к идеалу

Берегитесь проблем, связанных с плавающей точкой. Можно избежать ошибок, используя Math.pow() и parseFloat():

JS
Скопировать код
let shrewdlyRounded = parseFloat((yourNumber * Math.pow(10, decimalPlaces) / Math.pow(10, decimalPlaces)).toFixed(decimalPlaces)); // Выполнено верно!

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

Метод .toFixed() можно сравнить с обрезанием дерева до определённого количества ветвей, где вы работаете с числом:

JS
Скопировать код
let tree = 13.5678; // 🌳 у дерева перебор с ветвями
tree.toFixed(2);     // 🌳🌳 теперь "подстрижено" до строки с двумя знаками после запятой: "13.57"

Преобразование обратно в число: Представьте, что дерево становится деревянной фигурой:

JS
Скопировать код
Number(tree.toFixed(2)); // 🌳🌳🗿 наше дерево теперь – фигурка Пиноккио!

Глубиный разбор аспектов округления

Систематизируем информацию об округлении.

Встреча со специфичными случаями

Обратите внимание на особые ситуации, в частности, при округлении .5:

JS
Скопировать код
Math.round(0.5); // Вернёт 1
Math.floor(0.5); // Вернёт 0

Внимание к производительности

Если вам важна производительность, не используйте Math.pow() в циклах:

JS
Скопировать код
let powerPlay = Math.pow(10, decimalPlaces);
for (let i = 0; i < largeArray.length; i++) {
  largeArray[i] = Math.round(largeArray[i] * powerPlay) / powerPlay;
}

Избегаем ошибок с плавающей точкой

Для предотвращения ошибок с плавающей точкой используйте внешний инструмент, например decimal.js:

JS
Скопировать код
let Decimal = require('decimal.js');
let superRounded = new Decimal(yourNumber).toFixed(decimalPlaces); // Это надёжный способ округления.

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

  1. Number.prototype.toFixed() – JavaScript | MDN — Ваше руководство по .toFixed()
  2. Javascript toFixed Not Rounding – Stack Overflow — Обсуждение вопроса в сообществе разработчиков
  3. JavaScript Number Reference — Справочник по объекту Number в JavaScript
  4. JavaScript toFixed() Method — Полезные заметки для улучшения навыков программирования
  5. ECMAScript® 2024 Language Specification — Спецификации записи чисел в языке ECMAScript
  6. GitHub – MikeMcl/decimal.js: An arbitrary-precision Decimal type for JavaScript — Улучшенные возможности работы с числами в JavaScript
  7. Douglas Crockford's JavaScript — Изучите глубинные аспекты JavaScript с помощью Дугласа Крокфорда.