Ошибки с плавающей точкой в матричных библиотеках Java Colt
Как избежать ошибок с плавающей запятой в финансовых вычислениях, выполняемых с матричными библиотеками Colt?
3 ответа
Немного важного прочтения о злобности типов с плавающей запятой: что должен знать каждый компьютерщик об арифметике с плавающей запятой
И что-то более приправленное Java: как Java с плавающей точкой вредит всем и каждому
Для финансовых целей более распространено использование BigDecimal и связанных классов. float и double в любом случае очень подвержены ошибкам округления.
Возможно, вы захотите взглянуть на Apache Commons Math, если решите попробовать BigDecimal.
Один из распространенных методов - использовать целые числа и самостоятельно отслеживать десятичные дроби. Например, вы можете решить, что вся сумма вашей валюты будет представлена с точностью до 3 десятичных знаков. Поэтому вместо того, чтобы писать:
double dollars = 10.05d;
ты пишешь
int dollars = 10050;
и когда вы хотите распечатать сумму:
System.out.println( dollars/100d );