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