Округление любых чисел до формата X.XX на JavaScript

Есть несколько полей input, которые отображают результат вычисления функции. Практически всегда эти числа выглядят как 6579.186210714762, 12571.174950660548 и тд.

Для округления я использую такую функцию:

const roundResult = function(value) {
  return (value !== '' && !Number.isNaN(Number(value))) ? (Number(value) / 1000).toFixed(2) : value;
}

Этого вполне хватает, чтобы округлять все вычисляемые числа до формата X.XX.

Сложности появляются, когда я пытаюсь импортировать в своё приложение сохранённый ранее проект с уже полученными вычислениями. Опуская детали, хочу сказать, что в этом случае в указанные инпуты попадают уже округлённые числа вида 6.58, 12.57 и тд., которые всё та же функция roundResult повторно пытается округлить.

Я довольно долго копался, пытаясь решить эту, казалось бы, тривиальную задачу, но так и не смог придумать более-менее адекватного решения. Как можно обработать входящие числа таким образом, чтобы только сырые вычисления округлялись?

Буду благодарен любой помощи.


Ответы (3 шт):

Автор решения: Олег Верушкин

Есть функция toFixed(), поддерживает округление

const numObj = 12345.6789;
numObj.toFixed(2);
→ Ссылка
Автор решения: Andrew

Есть ли возможность превратить число в строку, разбить по точке и потом проверить длину элемента под индексом 1? Я бы так и сделал

String(num).split('.')[1].length > 2

Эта проверка позволит узнать необходимо ли вызывать вашу функцию

→ Ссылка
Автор решения: Aleksandr Belous
const roundResult = (value) => {
  if (isNaN(value)) {
    return NaN;
  }
  const isRoundNeeded = parseInt(value).toString().length > 2;

  if (isRoundNeeded) {
    return (value / 1000).toFixed(2);
  }
  return value;
};

console.log(roundResult(6579.186210714762));
console.log(roundResult(6.58));
→ Ссылка