Мораль этой сказки - никогда не использовать числа с плавающей запятой для обозначения денег!
Деньги поступают в виде дискретных сумм, и большинство финансовых и бухгалтерских правил признают это. Вы не можете физически оплатить счет за 3,145217 долларов. В то время как в 17-м веке было приемлемо отнести монету кузнецу и заставить его разрезать серебряный доллар на кусочки (у Pieces of Eight была хорошая маркировка кусочков пиццы, чтобы помочь этому процессу!) Сегодня это просто невозможно.
Например, самая маленькая монета, доступная в Швейцарии, стоит 5 рапсов, поэтому учет и счета должны быть выражены с точностью до 5 центов, т. Е. Вы не можете получить счет за 3,14 шв. Фр., Это должно быть 3,15 шв. Фр. Или 3,10 шв. Ваш поставщик щедр, потому что вы можете заплатить только 3,10 или 3,15 наличными.
Вы также можете открыть два варианта. Получите расширенную библиотеку BigDecimal, которая позволила бы точно указать вам округления. Или, в качестве другого автора, предложил использовать long long, представляющий ваши суммы в тысячных долях евро, и только на экране округления.
Еще одна возможность состоит в том, чтобы использовать единицы полцента, то есть 55 евро 35 центов внутренне представлены как 11070 полцентов, поэтому не нужно беспокоиться о округлении для любой стандартной бухгалтерской операции.
Я не могу не беспокоиться о том, что вы правильно не учли требования своего бизнеса. В моем последнем проекте было более ста страниц бизнес-правил, связанных с расчетами процентных ставок, по крайней мере 40 страниц касались количества десятичных знаков на каждом этапе расчета или используемого алгоритма округления.