如何在Java,SQL,ORM中使用货币数据类型
在 Java 应用程序中使用货币数据类型的最佳实践是什么?货币应该是双变量吗?四舍五入,货币等等呢?是专用库吗?那么大多数流行数据库中的ORM和SQL呢?据我所知,并非所有SQL引擎都是Money数据类型。在那种情况下,还是应该使用REAL数据类型?NUMERIC(15,2)
DECIMAL(15,2)
在 Java 应用程序中使用货币数据类型的最佳实践是什么?货币应该是双变量吗?四舍五入,货币等等呢?是专用库吗?那么大多数流行数据库中的ORM和SQL呢?据我所知,并非所有SQL引擎都是Money数据类型。在那种情况下,还是应该使用REAL数据类型?NUMERIC(15,2)
DECIMAL(15,2)
在 Java 应用程序中使用货币数据类型的最佳实践是什么?
使用 BigDecimal。使用任何基元迟早会导致精度问题。
那么大多数流行数据库中的ORM和SQL呢?
Hibernate(可能还有其他人)可以很好地处理BigDecimal。它转换为适当的数据库类型,通常是DECIMAL。
您应该 用于表示货币值。BigDecimal
来自 Bloch, J., Effective Java, 2nd ed, Item 48:
和 类型特别不适合货币计算,因为不可能将 0.1(或任何其他负 10 的次幂)表示为 a 或精确。
float
double
float
double
例如,假设您有1.03美元,并且您花费了42美分。你还剩下多少钱?
System.out.println(1.03 - .42);
打印出 。
0.6100000000000001
解决这个问题的正确方法是使用 ,或用于货币计算。
BigDecimal
int
long
对于 SQL,我使用 .NUMERIC(19,2)