我更改了我的java应用程序中保存货币值从double
到BigDecimal
的字段,以防止出现奇怪的双重舍入问题,如“0.20000000000001”。
现在创建了decimal(19,2)
的SQL日期类型,这意味着“。”的2位数字。这真的是存储货币价值的更好方法,还是这种方式甚至会失去精确度?
答案 0 :(得分:1)
如果您不想丢失精度值,那么您应该使用BigDecimal而不是BigInteger(在hibernate / JPA中的Entity类中)
请考虑以下演示:
// some calculation
double calculatedValue = 0.20039930000;
BigDecimal amount = new BigDecimal("" + calculatedValue).setScale(2,
BigDecimal.ROUND_HALF_UP);