Java BigDecimal 숫자 포맷팅: 천단위 구분자 및 소수점 조절

BigDecimal 형식의 데이터를 문자열로 변환하여 다양한 포맷을 적용하는 방법을 설명합니다. 모든 결과는 String 타입으로 반환됩니다.

  1. 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
    }
}
  1. 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
    }
}
  1. 백분율 변환 처리
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
    }
}
  1. 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보다 작습니다.");
        }
    }
}

태그: java BigDecimal DecimalFormat 수치포맷팅 백분율변환

7월 3일 01:58에 게시됨