DecimalFormat

DecimalFormat (십진수 형식)

십진수를 형식화하는 NumberFormat의 구체 하위 클래스예요. 서양·아랍·인도 숫자 지원을 포함해 어떤 로케일에서든 숫자를 파싱·형식화할 수 있게 하는 다양한 기능을 갖고 있어요. 정수(123), 고정 소수점(123.4), 과학 표기(1.23E4), 백분율(12%), 통화 금액($123) 같은 여러 종류의 숫자도 지원해요. 이 모든 것이 로컬라이즈될 수 있어요.

출처: Java API Reference

본문

특정 로케일(기본 로케일 포함)에 대한 NumberFormat을 얻으려면 NumberFormat의 팩토리 메서드 중 하나(예: getInstance())를 호출해요. 일반적으로 DecimalFormat 생성자를 직접 호출하지는 않는 것이 좋아요. NumberFormat 팩토리 메서드가 DecimalFormat이 아닌 하위 클래스를 반환할 수 있기 때문이에요.

형식 객체를 커스터마이즈해야 한다면 이렇게 해요.

NumberFormat numFormat = NumberFormat.getInstance(loc);
if (numFormat instanceof DecimalFormat decFormat) {
    decFormat.setDecimalSeparatorAlwaysShown(true);
}

DecimalFormat은 패턴과 심볼 집합으로 구성돼요. 패턴은 applyPattern()으로 직접 설정하거나 API 메서드로 간접 설정할 수 있고, 심볼은 DecimalFormatSymbols 객체에 저장돼요. NumberFormat 팩토리 메서드를 쓰면 패턴·심볼이 로컬라이즈된 ResourceBundle에서 읽혀요.

패턴 문법

DecimalFormat 패턴의 문법은 다음과 같아요.

  • 양수 패턴과 음수 패턴은 ;로 구분돼요. 예: "#,##0.00;(#,##0.00)"
  • 각 하위 패턴은 접두사(prefix), 숫자 부분, 접미사(suffix)를 가져요.
  • 음수 하위 패턴은 선택적이에요. 없으면 양수 패턴에 마이너스 기호(- U+002D)를 붙여 음수 패턴으로 써요. 즉 "0.00"만으로 "0.00;-0.00"과 동등해요.
  • 숫자 부분은 정수부와 소수부로 나뉘고, 지수부(E)가 있을 수 있어요.
  • 0은 숫자를 나타내고(없으면 0 표시), #도 숫자를 나타내지만(없으면 생략) 구분자 위치를 유지해요.
  • ,는 그룹 구분자, .는 소수 구분자를 나타내요.

예를 들어 "#,###.##" 패턴은 1234.56을 "1,234.56"으로 형식화해요.

지역 차이를 반영하려면 DecimalFormatSymbols를 사용해 소수·그룹 구분자 등을 바꿀 수 있어요. 소수 구분자가 전부 소수 부분이 아닌 자릿수에 나타나는지, 음수 접두사가 뒤에 오는지 등은 유니코드 데이터에서 로케일로부터 설정돼요.

더 알아보기 (Learn more)

Java 공식 API