java - 在 Hibernate/JPA 中将货币存储为 BigDecimal -decimal(19,2)

标签 java hibernate jpa currency bigdecimal

我将 Java 应用程序中保存货币值的字段从 double 更改为 BigDecimal,以防止奇怪的双舍入问题,例如“0.20000000000001”。

现在创建了 decimal(19,2) 的 SQL 日期类型,这意味着“.”右侧的 2 位数字。这真的是存储货币值(value)的更好方法吗?或者我是否会以这种方式失去精度?

最佳答案

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

考虑以下演示:

    // some calculation
    double calculatedValue = 0.20039930000;

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

关于java - 在 Hibernate/JPA 中将货币存储为 BigDecimal -decimal(19,2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24038665/

相关文章:

Java返回空列表而不是对象

java - 依赖排序算法

java - 使用 java.util.Calendar 存储和检索对象中存储的日期

java - 当我尝试添加一个 ID 时,我所有的 ID 都会增加

java - 使用 Http11NioProtocol 时启动 JBoss EAP 6.2 时出错

java - Hibernate:通过附加表实现多对多

java - org.hibernate.hql.ast.QuerySyntaxException 异常

java - 如何使用 JPA 获取 PessimisticLockException

java - Hibernate criteria,使用associations按限制返回结果

java - 如何在 Spring Boot 中获取索引的 json 作为响应?