Отсечение числа до двух десятичных без округления в JS

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

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

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

Чтобы обрезать число до двух знаков после точки, примените метод Math.floor(). Умножьте число на 100, затем примените метод Math.floor() и поделите полученный результат на 100.

JS
Скопировать код
const truncateToTwo = num => Math.floor(num * 100) / 100;

console.log(truncateToTwo(123.456)); // 123.45
console.log(truncateToTwo(123.999)); // 123.99

Этот подход безопасно обрезает числа до двух знаков после точки, исключая риск округления.

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

Подробности: понимание процесса

Чтобы обрезать число со всеми тонкостями, важно понять низкоуровневые детали процесса. Обрезание числа подразумевает устранение избыточных знаков после точки без округления.

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

Если говорить о высокой точности и мы не можем использовать Math.floor(), можно применить строковый подход:

JS
Скопировать код
function truncateToStr(num) {
  const numStr = num.toString();
  const matchedPortion = numStr.match(/^-?\d+(?:\.\d{0,2})?/);
  return matchedPortion ? Number(matchedPortion[0]) : num;
}

console.log(truncateToStr(123.4567)); // 123.45
console.log(truncateToStr(-123.4567)); //-123.45

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

Форматирование кода в функцию

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

JS
Скопировать код
const truncateDecimal = (num, decimalPlaces) => {
  const factor = Math.pow(10, decimalPlaces);
  return Math.trunc(num * factor) / factor;
};

console.log(truncateDecimal(123.456789, 2)); // 123.45

Функция Math.trunc позволяет создать надежный способ обрезки числа до требуемого количества знаков после точки.

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

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

Markdown
Скопировать код
Представьте число как пиццу: 3.14159🍕

Обрезать до двух десятичных знаков – это как взять только два первых кусочка:
plaintext
Скопировать код
| 3 | . | 1 | 4 | 🍕 | -> Сохраняем: | 3 | . | 1 | 4 |
И у вас получилась превосходная порция пиццы, аккуратно обрезанная до двух десятичных знаков. 🍕

Обращение с особыми случаями

Также, как и в жизни, в числах бывают свои потенциальные проблемы и особенности. Рассмотрим некоторые из них:

Научная нотация как потенциальное препятствие

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

JS
Скопировать код
function truncateScientific(num, decimalPlaces) {
  let numStr = num.toString();

  // Преобразовываем числа в научной нотации в десятичный формат
  if (/\d+\.?\d*e[+-]*\d+/i.test(numStr)) {
    let zero = '0';
    let parts = String(num).toLowerCase().split('e');
    let e = parts.pop();
    let l = Math.abs(e);
    let sign = e / l;
    let coeff_array = parts[0].split('.');

    if (sign === -1) {
      coeff_array[0] = Math.abs(coeff_array[0]);
      numStr = zero + '.' + new Array(l).join(zero) + coeff_array.join('');
    } else {
      let dec = coeff_array[1];
      if (dec) l -= dec.length;
      numStr = coeff_array.join('') + new Array(l + 1).join(zero);
    }
  }

  return truncateToStr(numStr); // Производим обрезку как обычно
}

console.log(truncateScientific(1.23e-5, 2)); // 0.00
console.log(truncateScientific(1.23e+5, 2)); // 123000.00

Обработка весьма мелких чисел

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

JS
Скопировать код
console.log(truncateScientific(0.000000123456, 2)); // 0.00

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

  1. JavaScript toFixed() Method — подходит для преобразования чисел в строковый формат с определённым количеством знаков после точки.
  2. String.prototype.slice() – JavaScript | MDN — помогает ужать строку до нужной длины.
  3. parseFloat() – JavaScript | MDN — конвертирует строковое представление числа в число с плавающей точкой.
  4. JavaScript Math floor() Method — необходим для округления чисел вниз до ближайшего целого.
  5. Handling Floating Point Precision in JavaScript — подробное объяснение принципов работы с числами с плавающей точкой.
  6. Интерфейс big.js — библиотека для выполнения точных математических расчётов с использованием таких функций, как toFixed().