통화 금액을 구문 분석하고 BigDecimal
값으로 저장하려고합니다. 문제의 통화 로케일이 주어지며 대부분의 경우 제대로 작동하지만 통화가 코스타리카 콜론 일 때 예기치 않은 결과가 나타납니다.통화 : 예기치 않게 소수 자릿수가 0입니다.
코스타리카 고객의 일반적인 통화 금액은 1.508.534,16
이고 ,16
은 소수 부분 (소수점 둘째 자리) 인 것으로 통보됩니다. 그러나 Currency.getDefaultFractionDigits()
을 호출하면 2
대신 0
이 소수 자릿수로 반환됩니다. 결과적으로 계산중인 값이 잘못 잘라졌습니다.
코드는 다음과 같다 :
// currencyLocale is "es_CR"
Currency currency = Currency.getInstance(currencyLocale);
int scale = currency.getDefaultFractionDigits();
// scale is 0 instead of 2
BigDecimal v = new BigDecimal("12.34")
.setScale(scale, BigDecimal.ROUND_HALF_DOWN);
// gives 12 instead of 12.34
참고 것을 최종 사용자에게 표시 양은 정확하게 소수 구분로서 ,
와 로케일 포맷되지만, 여기서 표준 값을 제공하는 데이터 소스 십진수는 1234.56
입니다.
내가 뭘 잘못하고 있니? 좀 더 연구를하고 후
UPDATE
및 reporting the issue to Google, 나는이 안드로이드 버그 지금 확신합니다. 영향을받는 통화는 전체 숫자 배수 (최소 동전은 5 colón)에서만 사용할 수 있기 때문에 Google의 응답은 의도 한대로 작동한다는 것입니다.
구글의 반응 등이 매우 합법적으로 송금,이자 계산의 결과로하지만, 귀하의 은행 계좌에서 분수 금액을 가질 수 있다는 사실, 답변 정말
실제 장치와 에뮬레이터에서 같은 결과를 얻었습니까? 로케일 문제가 에뮬레이터에서 예상했던 것과 다른 것으로 설정되었습니다. – Kennet
예, 에뮬레이터에서 동일한 결과가 나타납니다. –