Пытаясь посчитать сумму чисел заметил следующее поведение:
0.7 + 0.2 + 0.1 = 0.99999999...
Почему так происходит понятно из этого ответа.
Что с этим делать, если нужно чтобы ответ получался правильным?
В данном случае: 0.7 + 0.2 + 0.1 = 1
Какие есть решения данной проблемы?
Ошибку вычисления избежать трудно (много танцев с числами).
Лучше будет округлять после вычисления. причем можно округлять до целых если мы хотим видеть только целое число.
Math.round
Но если мы ожидаем увидеть дробное число этот метод не подойдет нужно использовать округление до до разумного знака после запятой. Округления до 10-го знака обычно бывает достаточно, чтобы отсечь ошибку вычислений и при этом получить нужную точность вычислений:
(0.1 + 0.2).toFixed(10)
но тут мы получаем тип string нужно доработать с помощью
parseFloat
Резюмируя округление можно делать так:
parseFloat((0.1 + 0.2+0.7).toFixed(10));
Все числа умножить на 10, округлить и просуммировать. Затем результат разделить на 10:
(Math.round(n1*10) + Math.round(n2*10) + ... + Math.round(nn*10)) / 10
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости