【问题标题】:while extracting double type field from Oracle DB automatically appends .0 to the value从 Oracle DB 中提取双精度类型字段时,会自动将 .0 附加到值中
【发布时间】:2026-01-13 13:10:01
【问题描述】:

我正在使用 JPA 将 Oracle DB 合并到 Spring Boot 中。我有一个实体,其中的字段定义如下:

 @Column(name = "TOTAL_PREMIUM", precision = 12, scale = 2)
private double totalPremium = 0;

在数据库中我可以看到的存储值是这样的:

但是当我尝试使用 JPARepository 获取此值时:

Quotes quotes = quoteRepo.findOne(quoteID);
quotes.getTotalPremium()

它给了 2.0, 1348.0 像这样,它对我来说有点不匹配。

有什么方法可以让我得到保存的内容,即值应该是 2, 1348

如果保存为 1389.48 等十进制值,则应返回 1389.48,如果保存 1389,则应返回 1389。

感谢任何帮助。

【问题讨论】:

  • 如果将值存储到 Double 变量中,则 2.0 = 2 = 2.000 ;) 所以没有问题
  • @VeselinDavidov 是的,你是对的。但是存在匹配确切值的情况,就像我从第三方获得不带小数的值一样。然后查询保存的数据是否相同
  • 好吧,如果您收到的值没有小数点,那么...将其解析为整数,因为此时它不是双精度数。
  • 为什么要投票,这是我真正的问题,我已经很好地描述了它,如果我需要做任何更正,请告诉我
  • 然后你需要将它映射到String,然后将它作为一个字符串进行比较。如果您将其映射为双倍,则应将其视为双倍

标签: java database oracle spring-boot jpa


【解决方案1】:

您的列被映射到双精度类型:

@Column(name = "TOTAL_PREMIUM", precision = 12, scale = 2)
private double totalPremium = 0;

在这里,您会丢失写入数据库中的任何数量的尾随零,因为如果数据库在 Java 代码中有 2.000 或 2.0 或 2,您将获得相同的双精度值 2。

因此,如果您稍后需要将其与字符串进行比较,则需要将该 totalPremium 映射到实体中的字符串并比较字符串。或者从您比较的字符串中解析双精度值并比较两个双精度值。我认为你应该做后者,因为如果你比较数字,你应该用数学方式比较它们。

【讨论】:

  • 在我的情况下,我没有丢失尾随零,实际上,当我尝试获取它时,值附加了 .0,但您在图像中看到的保存的值没有 .0,您能否详细说明这个
  • 你明白了是什么意思?您的 totalPremium 值是一个 double 值。它是 2(或 2.0 相同)。你在哪里看到它2.0?你把它变成一个字符串还是什么?
  • 请检查我更新的问题,我想得到这样的报价。getTotalPremium()