在Hibernate / JPA中将货币存储为BigDecimal - 十进制(19,2)

时间:2014-06-04 13:23:28

标签: java hibernate jpa currency bigdecimal

我更改了我的java应用程序中保存货币值从doubleBigDecimal的字段,以防止出现奇怪的双重舍入问题,如“0.20000000000001”。

现在创建了decimal(19,2)的SQL日期类型,这意味着“。”的2位数字。这真的是存储货币价值的更好方法,还是这种方式甚至会失去精确度?

1 个答案:

答案 0 :(得分:1)

如果您不想丢失精度值,那么您应该使用BigDecimal而不是BigInteger(在hibernate / JPA中的Entity类中)

请考虑以下演示:

    // some calculation
    double calculatedValue = 0.20039930000;

    BigDecimal amount = new BigDecimal("" + calculatedValue).setScale(2,
            BigDecimal.ROUND_HALF_UP);