【发布时间】:2018-12-20 03:33:50
【问题描述】:
我正在尝试使用休眠将浮点值保存到 MS SQL Server 中。价值是 2.4 保存到数据库后就变成了这样。
2.40000009536743
这是我的实体类中该字段的列定义。
@Column(name = "fTotalChipWeight")
private float totalChipWeight;
谁能告诉我为什么会这样
这是定义数据库列的方式
【问题讨论】:
-
2.4 不能完全用二进制浮点表示,并且类型
float仅提供 6-7 位十进制数字的精度。见Is floating point math broken?。我不愿将其作为一个骗子关闭,因为数据库列类型以及值的显示方式和位置可能存在一些复杂性,这些尚未披露。 -
我已经修改了问题,提供了有关 db 列定义的更多详细信息
-
一个 SQL
float不能代表 2.4。如果您恰好需要 2.4,则使用decimal可能会起作用。但是我们仍然没有足够的上下文来了解您的情况。 -
您可以尝试将您的数据库字段更改为
numeric(6,2),并为您的实体使用BigDecimal。这有帮助吗? -
还可以考虑使用
double。尽管double的值仍然不准确,但它的精度是其两倍,而且在double精度下,人类通常看不到浮点错误。
标签: java sql-server hibernate floating-point