답변:
public static String currencyFormat(BigDecimal n) {
return NumberFormat.getCurrencyInstance().format(n);
}
JVM의 현재 기본값 Locale
을 사용하여 통화 기호를 선택합니다. 또는 Locale
.
NumberFormat.getInstance(Locale.US)
자세한 내용은 NumberFormat
수업을 참조하세요 .
천 단위 구분 기호를 설정하려면 DecimalFormat123,456.78
을 사용해야 한다고 가정 합니다 .
DecimalFormat df = new DecimalFormat("#,###.00");
System.out.println(df.format(new BigDecimal(123456.75)));
System.out.println(df.format(new BigDecimal(123456.00)));
System.out.println(df.format(new BigDecimal(123456123456.78)));
결과는 다음과 같습니다.
123,456.75
123,456.00
123,456,123,456.78
#,###.00
마스크를 설정했지만 더 긴 값도 성공적으로 형식화합니다. 결과의 쉼표 (,) 구분 기호는 로케일에 따라 다릅니다. 러시아어 로케일의 경우 공백 () 일 수 있습니다.
"#,##0.00"
대신 패턴을 사용하십시오.
주어진 상황에 대해 이해할 수있는 또 다른 방법은
BigDecimal newBD = oldBD.setScale(2);
때문에 난 그냥이 말을 어떤 경우 는 이해가되지 않습니다 2 소수점을 넘어 돈에 관해서. 이를 한 단계 더 나아가면
String displayString = oldBD.setScale(2).toPlainString();
그러나 저는 단지 setScale 메소드를 강조하고 싶었습니다 (마지막 소수점 자리를 처리하는 방법을 제어하기 위해 두 번째 반올림 모드 인수를 사용할 수도 있습니다. 경우에 따라 Java는이 반올림 방법을 지정하도록 강제합니다).
@Jeff_Alieffson의 답변과 비슷하지만 기본값에 의존하지 않습니다 Locale
.
사용하여 DecimalFormatSymbols
명시 적으로 로케일 :
DecimalFormatSymbols decimalFormatSymbols = DecimalFormatSymbols.getInstance(new Locale("ru", "RU"));
또는 명시 적 구분 기호 :
DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
decimalFormatSymbols.setDecimalSeparator('.');
decimalFormatSymbols.setGroupingSeparator(' ');
그때:
new DecimalFormat("#,##0.00", decimalFormatSymbols).format(new BigDecimal("12345"));
결과:
12 345.00