Округление чисел с плавающей точкой в JavaScript: Math.round()

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

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

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

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

JS
Скопировать код
const round = (num) => Math.round(num * 100) / 100;
console.log(round(5.123)); // И получаем 5.12

Если требуется округление до n знаков после запятой, замените 100 на 10**n.

Кинга Идем в IT: пошаговый план для смены профессии

Особенности округления с помощью метода toFixed

Метод toFixed() в JavaScript особенно удобен для округления числа до определенного количества знаков после запятой. Он возвращает строковое значение.

JS
Скопировать код
let rounded = (num, decimals) => Number(num.toFixed(decimals));
console.log(rounded(6.688689, 2)); // Округляем до 6.69

Учтите, что toFixed() округляет число вверх или вниз в зависимости от того, превышает ли последняя цифра 5 или нет.

Методы округления и нежданные сложности

Существует не один путь к Риму...

В JavaScript возможно несколько вариантов округления:

  • Math.round(num) – универсальное округление до ближайшего целого числа.
  • Math.ceil(num) – всегда округляет число вверх.
  • Math.floor(num) – всегда округляет вниз.

Чтобы округлить с нужной точностью с помощью этих методов, используйте умножение и деление на 10^n.

...И непредвиденные трудности

Числа с плавающей точкой иногда вызывают проблемы из-за особенностей вычислений. Для минимизации ошибок можно применять дополнительные проверки или искать помощи у специализированных библиотек для точных вычислений.

Создание собственной функции округления

Если потребуется более гибкий контроль, стоит подумать о создании собственной функции decimalAdjust:

JS
Скопировать код
function decimalAdjust(type, value, exp) {
  if (typeof exp === 'undefined' || +exp === 0) {
    return Math[type](value);
  }
  value = +value;
  exp = +exp;
  if (isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0)) {
    return NaN;
  }
  value = value.toString().split('e');
  value = Math[type](+(value[0] + 'e' + (value[1] ? (+value[1] – exp) : -exp)));
  value = value.toString().split('e');
  return +(value[0] + 'e' + (value[1] ? (+value[1] + exp) : exp));
}

const round10 = (value, exp) => decimalAdjust('round', value, exp);

Сравнение производительности: какой способ быстрее?

Сравнивая производительность методов округления, можно выбрать наиболее оптимальный вариант:

JS
Скопировать код
console.time('Используя toFixed');
for (let i = 0; i < 100000; i++) {
  (Math.PI).toFixed(2);
}
console.timeEnd('Используя toFixed'); // Фиксируем время!

console.time('Используя умножение/деление');
for (let i = 0; i < 100000; i++) {
  Math.round(Math.PI * 100) / 100;
}
console.timeEnd('Используя умножение/деление'); // Кто быстрее?

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

Для наглядности привожу эмодзи, которые иллюстрируют различные методы округления:

Markdown
Скопировать код
| Метод                | Эквивалент с эмодзи | 
| -------------------- | ------------------ | 
| Math.round(3.14)     | 🌳🟩 → 🌳           |
| Math.ceil(3.14)      | 🌳🔼 → 🌲           |
| Math.floor(3.14)     | 🌳🔽 → 🌴           |
| +(3.14159.toFixed(2))| 🌳📏 → 🎄           |

Как и в садоводстве, где аккуратная обрезка приводит к красоте, так и в округлении чисел точность имеет значение.

Округление: то, что не расскажут в учебниках

Метод Number.toPrecision() может быть использован как скрытый инструмент для округления числа до определенного количества значимых чисел:

JS
Скопировать код
let num = 5.123456;
console.log(+num.toPrecision(4)); // Мы получаем 5.123

Унарный оператор + в данном случае конвертирует строку обратно в число.

За рамками стандартных методов

Для более сложных ситуаций с округлением вы можете обратиться к npm-пакетам, таким как mathjs, decimal.js или exact-round – они предлагают готовые решения для различных задач.

Внимание к деталям

Когда речь идет о финансовых или научных вычислениях, важно тщательно тестировать выбранный метод округления для обеспечения точности результатов.

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

  1. Math.round() – JavaScript | MDN
  2. Number.prototype.toFixed() – JavaScript | MDN
  3. Методы чисел в JavaScript
  4. Последние вопросы по тегу 'javascript+rounding' – Stack Overflow
  5. Числа
  6. Конвертер чисел с плавающей точкой IEEE-754