尝试Money
从 MySQL 数据库读取的 BigDecimal 创建 Joda-Money 对象会引发错误。
这段代码:
PreparedStatement p_stmt = ...;
ResultSet results = ...;
Money amount = Money.of(CurrencyUnit.USD, results.getBigDecimal("amount"));
抛出这个:
java.lang.ArithmeticException: Scale of amount 1.0000 is greater than the scale of the currency USD
at org.joda.money.Money.of(Money.java:74)
at core.DB.getMoney(DB.java:4821)
我实际上已经通过添加四舍五入解决了这个错误:
Money amount = Money.of(CurrencyUnit.USD, results.getBigDecimal("amount"), RoundingMode.HALF_UP);
但是,我对这种解决方案持怀疑态度。是最好的吗?
我正在DECIMAL(19,4)
按照这个 SO answer将货币价值存储在数据库中。老实说,这让我有点困惑,为什么那里的回答者要求在 DB 上精确到小数点后 4 位,但我倾向于相信高价值的答案,我认为他们知道他们在说什么,我会后悔没有关注他们的建议。然而,Joda-Money 不喜欢美国货币的小数点后 4 位精度。也许DECIMAL(19,4)
是他们需要小数点后 4 位精度的国际标准?没有把握..
为了使问题简洁:
- 是
RoundingMode.HALF_UP
解决此错误的理想解决方案吗? - 我应该将 MySQL DB 的精度从 更改
DECIMAL(19,4)
为DECIMAL(19,2)
吗? - 有没有办法改变 Joda-Money 的精度?如果是:我应该吗?