Skip to content

Latest commit

 

History

History
62 lines (44 loc) · 3.31 KB

how-to-fix-decimals-arithmetic-in-javascript.md

File metadata and controls

62 lines (44 loc) · 3.31 KB
title layout categories pubDate description keywords
Как исправить арифметику с десятичными числами в JavaScript?
../../layouts/ArticleEntry.astro
javascript
2024-02-14
Статья рассматривает как исправить арифметику с десятичными числами в JavaScript
javascript, math

При попытке сложить два десятичных числа в 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);