【问题标题】:store double value with precision using spring model and hibernate使用弹簧模型和休眠精确存储双精度值
【发布时间】:2015-01-29 10:28:37
【问题描述】:

我想将双精度值存储为 100.55,因为它将存储价格值。这个项目是带有休眠连接到mysql数据库的spring mvc。我是按模型来做的

@Column(name = "GRAND_TOTAL_AMOUNT",length=8,precision=2)
private Double grandTotalAmount;

没有得到想要的结果。提出解决方案?

【问题讨论】:

  • 没有得到想要的结果 - 你想要的结果是什么,你得到了什么?

标签: java hibernate spring-mvc jakarta-ee model


【解决方案1】:

您没有清楚地说明您的问题,但是,您的映射中有一个错误。您应该使用precisionscale 而不是长度,因为长度是指字符串值,因此您应该更改为

@Column(name = "GRAND_TOTAL_AMOUNT", precision=8, scale=2)
private Double grandTotalAmount;

还要注意,在处理金钱时,BigDecimal 是比 double 更受欢迎的类型。映射可以保持不变

@Column(name = "GRAND_TOTAL_AMOUNT", precision = 8, scale = 2)
private BigDecimal grandTotalAmount;

查看此博客以了解更多信息https://blogs.oracle.com/CoreJavaTechTips/entry/the_need_for_bigdecimal

【讨论】:

  • 我已经尝试过您的解决方案,但没有解决双倍问题。所以我想将货币值存储在像 100.99 这样的双字段中但是当我进一步做一些除法然后存储它时显示超过 2 位小数,比如 50.369852 我希望它应该默认将值存储为 50.37。双倍可以吗?
  • 如果你修复你的映射以使用精度和比例,你可以使用 double 或 BigDecimal,但你需要在持久化之前对其进行舍入,最简单的方法是将舍入逻辑添加到 setter例如公共无效 setGrandTotalAmount(BigDecimal decTest) { this.decTest = decTest.setScale(3, RoundingMode.HALF_UP)); } 或 double 的等价物。那么你的十进制格式应该是一致的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 2011-08-09
  • 2016-07-09
  • 2016-11-04
  • 2011-02-01
  • 2015-06-05
  • 1970-01-01
相关资源
最近更新 更多