1

가 여기에 내가 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가 $에 대해하는 일입니다. 나는 또한 그것이 기호 - 통화가 일대일 매핑이라고 잘못 가정한다고 생각한다.

답변