2013-04-11 3 views
1

통화 값으로 10 진수 값을 형식화하려고합니다. 1234.56d는 "1.234,56"이되어야합니다 (일부 유럽 국가에서는이 형식이 사용됩니다). 나는 소수 값의 형식을 다음과 같은 패턴을 사용하고 : 새로운 FmtNumber (: 사실DecimalFormat "패턴의 여러 소수 구분 기호"

final DecimalFormat df = new DecimalFormat("###.###.###,00"); 
final String formatted = df.format(1234.56d); 
System.out.println(formatted); 

을 패턴 구문이 동일하기 때문에, 나는 SuperCSV의 클래스 FmtNumber을 사용하고,하지만 그건 중요하지 않습니다 "###. ###. ###, 00");

내가 얻는 것은 "패턴에 여러 소수 구분 기호"라는 메시지가있는 IllegalArgumentException입니다.

소수 구분 기호는 하나만 가능하다는 것을 알고 있습니다. 하지만 제 경우에는 ","이되어야합니다. 그리고 ","는 내 패턴으로 한 번 나타납니다.

이 예외 메시지에 대해 웹과 StackOverflow를 검색했지만 도움이되지 않은 답변을 찾았습니다.

무엇입니까? 내 오류입니다. 형식 문자열 .에서 javadoc에서

+0

이 SO 질문에 봐 : http://stackoverflow.com/questions/5054132/how-to-change-the-decimal-separator-of-decimalformat-from-comma-to-dot -point –

+0

당신이 옳다는 것이 도움이됩니다. 나는 그것을 찾아서 찾지 못했습니다. 하지만 필자의 오해는 필자가 ","을 의미한다는 것이었지만 그룹화 구분 기호에 대한 심볼 일뿐입니다. – Steffzilla

답변

2

항상 소수 구분 및 , 것은 항상 그룹화 구분 입니다.

실제 표현 형식은 String이며 형식 표현식의 로캘에 의해 지정됩니다. 예를

final DecimalFormat decimalFormat = new DecimalFormat("###,###,##0.00", DecimalFormatSymbols.getInstance(Locale.ENGLISH)); 

를 들어

당신이 FmtNumber에 대한 javadoc 보면 명확하다 "는에 DecimalFormat 클래스와 기본 로케일을 사용하여"말한다 - 그래서 당신은이에 대한 올바른 기본 Locale이 일을해야 할 필요가있다.

+0

좋아요! 새 FmtNumber ("###, ###, ## 0.00")가 예상대로 작동합니다. 그래서 "." 및 ","기호 만 있습니다. 내가 참조. – Steffzilla

+0

FmtNumber ("###, ###, ## 0.00")는 FmtNumber ("###, ###, ###. 00")보다 우수합니다. – Steffzilla

0

사용자 지정 문자열이 아닌 culture로 서식을 지정해야합니다. 그냥 사용

decimalNumber.ToString("C2", CultureInfo.CreateSpecificCulture("fr-FR")); 
+0

이 정보를 제공해 주셔서 감사합니다. – Steffzilla