나는이 BigDecimal
필드 amount
돈을 나타내고, 나는 같은 형식으로 브라우저에서 그 값을 인쇄해야 $123.00
, $15.50
, $0.33
.
어떻게 할 수 있습니까?
(나 자신이 점점 볼 수있는 유일한 간단한 솔루션 floatValue
에서 BigDecimal
사용하여 다음과 NumberFormat
분수 부분에 대한 두 자리 정밀도를 만들기 위해).
답변
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
마스크를 설정했지만 더 긴 값도 성공적으로 형식화합니다. 결과의 쉼표 (,) 구분 기호는 로케일에 따라 다릅니다. 러시아어 로케일의 경우 공백 () 일 수 있습니다.
답변
주어진 상황에 대해 이해할 수있는 또 다른 방법은
BigDecimal newBD = oldBD.setScale(2);
때문에 난 그냥이 말을 어떤 경우 는 이해가되지 않습니다 2 소수점을 넘어 돈에 관해서. 이를 한 단계 더 나아가면
String displayString = oldBD.setScale(2).toPlainString();
그러나 저는 단지 setScale 메소드를 강조하고 싶었습니다 (마지막 소수점 자리를 처리하는 방법을 제어하기 위해 두 번째 반올림 모드 인수를 사용할 수도 있습니다. 경우에 따라 Java는이 반올림 방법을 지정하도록 강제합니다).
답변
BigDecimal pi = new BigDecimal(3.14);
BigDecimal pi4 = new BigDecimal(12.56);
System.out.printf("%.2f",pi);
// 3.14 출력
System.out.printf("%.0f",pi4);
// 13을 인쇄합니다.
답변
@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
답변
BigDecimal(19.0001).setScale(2, BigDecimal.RoundingMode.DOWN)