Страницы

Поиск по вопросам

суббота, 11 января 2020 г.

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

#javascript #числа


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

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


Ответы

Ответ 1



Ошибку вычисления избежать трудно (много танцев с числами). Лучше будет округлять после вычисления. причем можно округлять до целых если мы хотим видеть только целое число. Math.round Но если мы ожидаем увидеть дробное число этот метод не подойдет нужно использовать округление до до разумного знака после запятой. Округления до 10-го знака обычно бывает достаточно, чтобы отсечь ошибку вычислений и при этом получить нужную точность вычислений: (0.1 + 0.2).toFixed(10) но тут мы получаем тип string нужно доработать с помощью parseFloat Резюмируя округление можно делать так: parseFloat((0.1 + 0.2+0.7).toFixed(10));

Ответ 2



Все числа умножить на 10, округлить и просуммировать. Затем результат разделить на 10: (Math.round(n1*10) + Math.round(n2*10) + ... + Math.round(nn*10)) / 10

Комментариев нет:

Отправить комментарий