Comments 11
Почему не хранить сумму в long?
И оперировать копейками - 1 руб. 10 копеек, будем перечислять 110.
Или BigDecimal
PS не совсем понял про скрины из налоговой и float. Почему вы решили, что там используется float ?
Да, целочисленное хранение денежных единиц распространено в банках, например в платежных API. PS Ну, конечно, я точно не знаю.. но 1) не могу представить как можно недоплатить 3 копейки 2) как-то же у них получились -3 копейки в расчетах? 3) Могла ли получиться такая погрешность без float?
оперировать копейками
Как только будет надо сосчитать какие то проценты - так и появятся погрешности округления копеек.
Потому что, многим людям, чисто морально, тяжко дается даже просто признать факт существования самого вопроса "а вдруг ошибка была на нашей стороне? ".
А завтра вы захотите локализовать этот продукт для использования на рынках Омана и Японии, и узнаете, что в одном риале — тысяча байз, а в одной йене — одна йена.
Вообще нельзя float для финансов использовать. Никогда
Для денег специальные типы придуманы в компьютерах, чтобы эта погрешность не копилась. Ведение бухгалтерии - это отдельное искусство. Если работаете с деньгами, лучше заранее изучить.
А системы, которые используют числа с плавающей точкой для финансов мне встречались. Одно время провайдер использовал такую и людей массово отключали за неуплату, потому что к началу месяца у них на счёте числился долг в 0,01 копейки. Просто абонентская плата списывалась каждый день. И в один прекрасный момент вылезает погрешность из-за того, что сумма делится на число дней. Лечилось там просто установкой порога отключения в 1 рубль (с запасом). А потом, благо, эту систему сменили.
P.S. Систему звали Bill-Master.
Вычисление/сравнение float и налоговая