awilum.ru
Статьи Курсы Об авторе

Как исправить арифметику с десятичными числами в JavaScript?

При попытке сложить два десятичных числа в JavaScript вы можете столкнуться с неожиданным поведением. Например, результат 0.1 + 0.1 будет ожидаемым - 0.2.

Однако иногда вы получите неожиданный результат. Например, при выполнении операции 0.1 + 0.2.

Результат не будет равен 0.3, как ожидается, а будет 0.30000000000000004.

Аналогично, при вычислении выражения 1.4 - 1 результатом будет 0.3999999999999999.

Это явление не уникально для JavaScript, оно возникает в любом языке программирования.

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

Для обхода этой проблемы вы можете использовать библиотеки, такие как decimal.js, bignumber.js или big.js.

Вы также можете использовать следующий трюк.

Вы обрезаете десятичные знаки после 2 позиций, и умножить число на 100, чтобы удалить десятичную часть.

Затем вы делите на 100 после выполнения суммирования:

(0.1.toFixed(2) * 100 + 0.2.toFixed(2) * 100) / 100

Более практичный вариант:

const sum = (a, b, positions) => {
  const factor = Math.pow(10, positions)
  return (a.toFixed(positions) * factor + b.toFixed(positions) * factor) / factor
}

sum(0.1, 0.2, 4);
Хотите освоить JavaScript и стать востребованным разработчиком?
Присоединяйтесь к курсу JavaScript Базовый уровень прямо сейчас!
Изучите основы и продвинутые концепции, создавайте интерактивные веб-приложения и воплотите свои идеи в реальности. Не упустите шанс стать экспертом в мире разработки – начните свой путь прямо сейчас!
Обнаружили ошибку в этой статье? Хотите уточнить, обновить или добавить что-то?
Все мои статьи доступны для редактирования на GitHub. Буду благодарен за любое улучшение или исправление!