BigDecimal 형식의 데이터를 문자열로 변환하여 다양한 포맷을 적용하는 방법을 설명합니다. 모든 결과는 String 타입으로 반환됩니다.
- DecimalFormat을 활용한 포맷팅
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
public class NumberFormatter {
public static void main(String[] args) {
// 고정 소수점 자리수 설정 (두 자리)
DecimalFormat formatter1 = new DecimalFormat("#,##0.00");
formatter1.setRoundingMode(RoundingMode.HALF_UP);
System.out.println(formatter1.format(new BigDecimal("124.3"))); // 124.30
System.out.println(formatter1.format(new BigDecimal("124.315"))); // 124.32
System.out.println(formatter1.format(new BigDecimal("124.325"))); // 124.33
// 유동적 소수점 자리수 처리
DecimalFormat formatter2 = new DecimalFormat("#,##0.##");
System.out.println(formatter2.format(new BigDecimal("124.6"))); // 124.6
System.out.println(formatter2.format(new BigDecimal("124"))); // 124
// 고정 길이 포맷
DecimalFormat formatter3 = new DecimalFormat("000.00");
System.out.println(formatter3.format(new BigDecimal("24"))); // 024.00
// 천단위 구분자 추가
DecimalFormat formatter4 = new DecimalFormat("#,##0.000");
System.out.println(formatter4.format(new BigDecimal("3613.61"))); // 3,613.610
System.out.println(formatter4.format(new BigDecimal("3613.613"))); // 3,613.613
System.out.println(formatter4.format(new BigDecimal("3613.6135"))); // 3,613.614
System.out.println(formatter4.format(new BigDecimal("3613.6136"))); // 3,613.614
}
}
- setScale() 메서드 사용
import java.math.BigDecimal;
import java.math.RoundingMode;
public class ScaleAdjuster {
public static void main(String[] args) {
BigDecimal number1 = new BigDecimal("911.911");
BigDecimal number2 = new BigDecimal("911.91156");
// 소수점 4자리로 설정 (반올림 적용)
number1 = number1.setScale(4, RoundingMode.HALF_UP);
number2 = number2.setScale(4, RoundingMode.HALF_UP);
System.out.println("number1: " + number1); // 911.9110
System.out.println("number2: " + number2); // 911.9116
// 문자열로 변환 시 0 채우기 여부 제어
String str1 = number1.setScale(4, RoundingMode.HALF_UP).toString();
System.out.println("str1: " + str1); // 911.9110
String str2 = new BigDecimal(number1.setScale(4, RoundingMode.HALF_UP))
.setScale(4, RoundingMode.HALF_UP)
.toString();
System.out.println("str2: " + str2); // 911.9110
}
}
- 백분율 변환 처리
import java.math.BigDecimal;
import java.text.DecimalFormat;
public class PercentConverter {
public static void main(String[] args) {
// BigDecimal → 백분율 문자열 변환
DecimalFormat percentFormatter = new DecimalFormat("0.00%");
BigDecimal value = new BigDecimal("0.666");
String percentStr = percentFormatter.format(value);
System.out.println("백분율: " + percentStr); // 66.60%
// 백분율 문자열 → BigDecimal 변환
String cleanedPercent = percentStr.replace("%", "");
BigDecimal decimalValue = new BigDecimal(cleanedPercent).divide(BigDecimal.TEN, 2, RoundingMode.HALF_UP);
System.out.println("BigDecimal 값: " + decimalValue); // 0.67
}
}
- BigDecimal 비교 연산
import java.math.BigDecimal;
public class BigDecimalComparator {
public static void main(String[] args) {
BigDecimal numA = new BigDecimal("3.14");
BigDecimal numB = new BigDecimal("3.20");
int result = numA.compareTo(numB);
if (result == 0) {
System.out.println("numA와 numB는 같습니다.");
} else if (result == 1) {
System.out.println("numA가 numB보다 큽니다.");
} else {
System.out.println("numA가 numB보다 작습니다.");
}
}
}