用户输入是:44.4如何在java和hibernate中存储精确的精确值?
虽然存储到数据库其转换为:44.40000153
数据库数据类型是:浮子和长度是:20,8
在这里,我想准确存储44.4
我不想更改数据库设计。
用户输入是:44.4如何在java和hibernate中存储精确的精确值?
虽然存储到数据库其转换为:44.40000153
数据库数据类型是:浮子和长度是:20,8
在这里,我想准确存储44.4
我不想更改数据库设计。
然后请不要使用float
。在数据库中使用number(10,5)
(或者需要多个数字),在Java中使用BigDecimal
。
BigDecimal
为您提供了无限数量的数字,但在数据库中存在限制。通常是38位数字(即通常就足够了)。
field float(20,1)
您可以尝试使用上面的变化。
让它20,1
我曾试图下同
create table abc(field float(20,1));
insert into abc value(44.4);
select * from abc
或者,如果你是无法改变的数据库,然后用下面去查询
select cast(field as decimal(10,1)) from abc;
在这里,我哈哈d used CAST
它显示了我的预期结果。
谢谢..但我不能改变固定的数据库。 –
然后,您不能在该列中精确地存储“44.4”。您可以尝试在使用“NumberFormat”进行显示之前将其四舍五入。 – Thilo
在数据库中存储任意精确值的一个选项是将它们存储为字符串并将其转换为/从BigDecimal转换。尽管如此,您仍然无法在查询中对它们执行数字操作。 – Raniz