我试图在 MySQL 数据库中存储浮点数,但 Hibernate 获得的值与列中存储的值不同,
在我的应用程序中我计算:
float subtotal = 160.5f;
float ammount = (float) (subtotal * 0.1f); // this way I get the 10%
receipt.setAmmount(ammount);
receipt.save();
如果我记录该金额,我会得到如下信息:
19/04/2013 10:17:20 [INFO] ServiceImpl: Added ammount x $16.05
我的专栏ammount
在 mysql 数据库中是FLOAT UNSIGNED
当我进行选择时,我获得 16.05 作为值,但后来,当我使用 Hibernate 获取该对象时,ammount 字段是 16.049999237060547。
我的 hbm 专栏如下所示:
<property name="ammount" type="float"></property>
我正在读书here https://stackoverflow.com/questions/399401/hibernate-and-currency-precision and here https://blogs.oracle.com/CoreJavaTechTips/entry/the_need_for_bigdecimal推荐使用BigDecimal
在Java中而不是Float
or Double
为了钱,但我不知道我应该在数据库中使用什么数据类型或如何配置 Hibernate 以使用该数据类型,谢谢!
推荐的 DECIMAL 和 NUMERIC 类型的 Java 映射是
java.math.BigDecimal。 java.math.BigDecimal 类型提供数学
允许 BigDecimal 类型相加、相减的操作,
与其他 BigDecimal 类型相乘和相除,与整数
类型,以及浮点类型。
建议检索 DECIMAL 和 NUMERIC 值的方法是
ResultSet.getBigDecimal。 JDBC 还允许访问这些 SQL 类型:
简单的字符串或字符数组。因此,Java 程序员可以使用
getString 接收 DECIMAL 或 NUMERIC 结果。然而,这使得
使用 DECIMAL 或 NUMERIC 作为货币值的常见情况
SEE HERE https://stackoverflow.com/questions/7550337/what-type-would-you-map-bigdecimal-in-java-hibernate-in-mysql
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)