MySQL 데이터베이스에서 읽은 BigDecimal에서 Joda-Money Money
객체를 만들려고하면 오류가 발생합니다.ResultSet :: getBigDecimal이 joda-money에 대한 scale 예외를 throw합니다.
이 코드 :이의 의심 오전
Money amount = Money.of(CurrencyUnit.USD, results.getBigDecimal("amount"), RoundingMode.HALF_UP);
그러나 :
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)
내가 실제로 라운딩을 추가하여 오류를 해결 한 :
PreparedStatement p_stmt = ...;
ResultSet results = ...;
Money amount = Money.of(CurrencyUnit.USD, results.getBigDecimal("amount"));
이 예외 해결책. 최고야?.
나는 this SO answer에 따라 DB에 금액을 저장하기 위해 DECIMAL(19,4)
을 사용하고 있습니다. 정직하게 말하면, 그것은 혼란 스러웠습니다. 그 이유는 응답자가 DB에 소수점 이하 4 자리를 요구했기 때문입니다.하지만 저는 고수준 응답을 신뢰하는 경향이 있으며, 그들이 말하는 내용을 알고 있다고 가정하고 그 내용을 따르지 않을 것을 후회할 것입니다. 조언. 그러나 Joda-Money는 미국 통화로 소수점 이하 4 자리를 좋아하지 않습니다. 어쩌면 DECIMAL(19,4)
은 소수점 이하 4 자리를 필요로하는 국제 표준 이었습니까? 확실하지 ..
- 가
RoundingMode.HALF_UP
이 오류를 해결하는 이상적인 솔루션인가? - MySQL 데이터베이스의 정밀도를
DECIMAL(19,4)
에서DECIMAL(19,2)
으로 변경해야합니까? - Joda-Money의 정밀도를 변경하는 방법이 있습니까? 그렇다면 :해야합니까?
글쎄, 당신은 센트를 잃지 않을 것입니다. 'BigDecimal'''HALF_UP'을'Money' 객체의 스케일로 반올림하기 때문에 센트의 일부를 닫을 수 있습니다. – ryvantage