在java应用程序中,我使用:
在JPA实体中,我定义了BigDecimal数值:
@Column(name = "MON_AMT", precision=18, scale=2)
private BigDecimal moneyAmount;
public void setMoneyAmount(BigDecimal moneyAmount){
this.moneyAmount = moneyAmount;
}
public BigDecimal getMoneyAmount(){
return moneyAmount;
}
在数据库中,此列定义为NUMBER(18,2),因此精度为18,比例为2.
当我尝试保存这样的示例值:1234567890123456.89时,它可能在持久层中被JPA错误地从数据库映射到BigDecimal值。因此,我从数据库读回时获得了数字:1234567890123457(数字被四舍五入)。
该数字已从UI层正确发送并正确存储在数据库中(SQL查询返回正确值1234567890123456.89)。
对于较小的数字(例如4567.89),不存在更有趣的问题
我尝试通过向JPA @Column注释添加参数比例和精度来解决问题,如上所示,但没有预期结果。
这个问题非常不舒服,可能会造成灾难,因为存储的价值就是货币价值。
你有什么想法可能是这种症状的原因吗?