Сумма чисел с плавающей точкой

161
26 декабря 2017, 18:57

Пытаясь посчитать сумму чисел заметил следующее поведение:
0.7 + 0.2 + 0.1 = 0.99999999...
Почему так происходит понятно из этого ответа.

Что с этим делать, если нужно чтобы ответ получался правильным?
В данном случае: 0.7 + 0.2 + 0.1 = 1
Какие есть решения данной проблемы?

Answer 1

Ошибку вычисления избежать трудно (много танцев с числами).

Лучше будет округлять после вычисления. причем можно округлять до целых если мы хотим видеть только целое число.

Math.round

Но если мы ожидаем увидеть дробное число этот метод не подойдет нужно использовать округление до до разумного знака после запятой. Округления до 10-го знака обычно бывает достаточно, чтобы отсечь ошибку вычислений и при этом получить нужную точность вычислений:

(0.1 + 0.2).toFixed(10) 

но тут мы получаем тип string нужно доработать с помощью

parseFloat

Резюмируя округление можно делать так:

parseFloat((0.1 + 0.2+0.7).toFixed(10));
Answer 2

Все числа умножить на 10, округлить и просуммировать. Затем результат разделить на 10:

(Math.round(n1*10) + Math.round(n2*10) + ... + Math.round(nn*10)) / 10
READ ALSO
Обновление формы вариативного товара

Обновление формы вариативного товара

Всем приветСразу хочу сообщить-оправдаться, что только начинаю разбираться в веб-разработке

198
Необычное поведение javascript

Необычное поведение javascript

Добрый день! У меня есть массив который загружается с базы данныхЕсли после загрузки массива отобразить его в консоль, то он без проблем отобразится

165
Выводить элементы на одной карте

Выводить элементы на одной карте

В данном примере все работает хорошо, но строится новая картаНужно чтобы пункты выводились на одной карте, а не создавалась новая

189