가 여기에 내가 Moneta version 1.1로 사용하고 예제 코드입니다 :
Locale LANG = Locale.CHINA; // also tried new Locale("pl", "PL");
final MonetaryAmountFormat format = MonetaryFormats.getAmountFormat(
AmountFormatQueryBuilder.of(LANG)
.set(CurrencyStyle.SYMBOL)
.set("pattern", "#,##0.00### ¤")
.build()
);
final String formatted = format.format(Money.of(new BigDecimal("1234.56"), Monetary.getCurrency(LANG)));
System.out.println(formatted);
System.out.println(format.parse(formatted).getNumber());
이 일을해야하기 때문에 나는 동일한 개체를 변환하는거야 이리저리. 내가 틀린 것을 얻지 않고 컨버터가 $, € 또는 £보다 다른 통화에 양방향이 아닌 한.
마지막 줄에 충돌 :
Exception in thread "main" java.lang.IllegalArgumentException: Invalid error index > input.length
at javax.money.format.MonetaryParseException.<init>(MonetaryParseException.java:56)
at org.javamoney.moneta.internal.format.AmountNumberToken.parse(AmountNumberToken.java:140)
at org.javamoney.moneta.internal.format.DefaultMonetaryAmountFormat.parse(DefaultMonetaryAmountFormat.java:190)
at test.main(test.java:27)
이 제공 로케일이 £ $ 중 하나와 관련, € 또는되어 있지 않은 경우 발생합니다. 예를 들어이 코드는 에서 작동하지만 Locale.CHINA
은 물론 new Locale("pl", "PL")
으로 충돌합니다. 따라서 이것은 정의 된 Locale
으로 정의 된 문제뿐 아니라 정적으로 미리 정의 된 문제입니다.
나는 내부 패키지에 조금 파고처럼 보이는, org.javamoney.moneta.internal.format.CurrencyToken.parse(CurrencyToken.java:196)
발견 : $ 이외의 통화에 대한 작업 위의 내 코드를 만들기 위해 어떤 방법이 있나요, € 또는 £
case SYMBOL:
if (token.startsWith("$")) {
cur = Monetary.getCurrency("USD");
context.consume("$");
} else if (token.startsWith("€")) {
cur = Monetary.getCurrency("EUR");
context.consume("€");
} else if (token.startsWith("£")) {
cur = Monetary.getCurrency("GBP");
context.consume("£");
} else {
cur = Monetary.getCurrency(token);
context.consume(token);
}
context.setParsedCurrency(cur);
break;
? 내가 가진
는 잘못된 데이터
Locale LANG = Locale.CANADA;
final MonetaryAmountFormat format = MonetaryFormats.getAmountFormat(
AmountFormatQueryBuilder.of(LANG)
.set(CurrencyStyle.SYMBOL)
.set("pattern", "#,##0.00### ¤")
.build()
);
final String formatted = format.format(Money.of(new BigDecimal("1234.56"), Monetary.getCurrency(LANG)));
System.out.println(formatted);
System.out.println(format.parse(formatted).getCurrency().getCurrencyCode());
마지막 줄에 반환 USD
대신 CAD
을의를 실패없이 실행 만 반환 그래서 그들은 또한 통화 기호로 $를 Locale.CANADA 제공 예를 들어 몇 가지를 시도하는 이것은 if-else가 $에 대해하는 일입니다. 나는 또한 그것이 기호 - 통화가 일대일 매핑이라고 잘못 가정한다고 생각한다.