如何在Java,SQL,ORM中使用money数据类型

blt*_*ltc 19 java sql orm types currency

在Java应用程序中使用money数据类型的最佳实践是什么?钱应该是双变量?四舍五入,货币等等.这是特殊的图书馆吗?那么在大多数流行的数据库中ORM和SQL呢?据我所知,并非所有SQL引擎都是Money数据类型.在那种情况下NUMERIC(15,2),DECIMAL(15,2)应该使用REAL数据类型?

jpk*_*ing 21

在Java应用程序中使用money数据类型的最佳实践是什么?

使用BigDecimal.使用任何原语迟早导致精度问题.

那么在大多数流行的数据库中ORM和SQL呢?

Hibernate(可能还有其他所有人)可以很好地处理BigDecimal.它转换为适当的数据库类型,通常是DECIMAL.


dog*_*ane 18

您应该BigDecimal用来表示货币价值.

来自Bloch,J.,Effective Java,2nd ed,Item 48:

这些floatdouble类型特别不适合进行货币计算,因为不可能将0.1(或任何其他10的负幂)表示为a floatdouble精确.

例如,假设您有1.03美元,而您花费42c.你还剩多少钱?

System.out.println(1.03 - .42);
Run Code Online (Sandbox Code Playgroud)

打印出来0.6100000000000001.

解决这个问题的正确方法是使用BigDecimal,intlong 货币计算.

对于SQL,我使用NUMERIC(19,2).