Представьте себе электронный магазин. Цены даны с точностью до копейки(цента, евроцента и т.п.).
Вы пишете интерфейс для него. Основная работа происходит на сервере, но и на клиенте все должно быть хорошо. Сложение цен на купленные товары и умножение их на количество является обычной операцией.
Получится глупо, если при заказе двух товаров с ценами 0.10$ и 0.20$ человек получит общую стоимость 0.30000000000000004$.
Как складывать цены, чтобы избежать проблем с ошибками округления?
Решение
Решение
Есть два основных варианта.
- Можно хранить сами цены в копейках, т.е. «умноженные на 100». Тогда они всегда будут целые и проблема исчезнет.
- При операциях, когда необходимо получить окончательный результат — округлять до 2го знака после запятой. Все, что дальше — ошибка округления:
var price1 = 0.1, price2 = 0.2; alert( +(price1 + price2).toFixed(2) );
#411