본문 바로가기
카테고리 없음

[JAVA] 정수 3자리 마다 콤마(,) 찍는 법

by yeaseul912 2023. 2. 27.
728x90

사용자가 큰 정수(Integer)를 볼 때 콤마로 자릿수가 구분되어 있으면 더 빠르게 숫자를 파악할 수 있게 된다.

또 Double형이나 Float형과 같은 지수형은 데이터가 커지면 데이터에 영문 E가 붙어서 표현된다. (지수 표기법)

이러한 숫자를 프론트에서 사용자를 위하여 큰 수에 콤마를 찍는 방법을 찾아보았다.

 

1. DecimalFormat을 이용한 방법

DecimalFormat 객체를 생성할 때 "###,###" 을 인자로 넣어 포맷을 설정해준다.

 .format 메서드에 인자로 숫자를 넘기면 원하는 포맷대로 숫자를 반환해준다.

int num1 = 2147483647; // –2,147,483,648 ~ 2,147,483,647
log.info("정수 출력 : {}", num1);

DecimalFormat decFormat = new DecimalFormat("###,###");
log.info("decFormat 3자리 콤마 표현 : {}", decFormat.format(num1));

DecimalFormat decFormat2 = new DecimalFormat("####,####");
log.info("decFormat 4자리 콤마 표현 : {}", decFormat2.format(num1));

[결과]

정수 출력 : 2147483647
decFormat 3자리 콤마 표현 : 2,147,483,647
decFormat 4자리 콤마 표현 : 21,4748,3647

 

2. NumberFormat을 이용한 방법

NumberFormat은 설정된 지역에서 사용하는 표기법으로 문자열을 표현해줍니다.

NumberFormat 객체를 생성할 때, getInstance에 Locale 인자를 전달하면되는데, 

Default로 Locale.US 가 설정되어 있어 미국 숫자 표기법을 따릅니다.(3자리 마다 콤마)

NumberFormat numberFormatUS = NumberFormat.getInstance();
log.info("numberFormat 콤마 표현 : {}", numberFormatUS.format(num1));
numberFormat 콤마 표현 : 2,147,483,647

 

3. 지수를 정수로, 콤마로 표현해보기

BigDecimal 은 Java 언어에서 숫자를 정밀하게 표현할 수 있는 표현식이다.

BigDecimal 형으로 변환하면 소수점이 아주 정밀하게 나온다.

마찬가지로 위에서 사용한 DecimalFormat 과 NumberFormat을 사용하여 콤마형식으로 바꿔주었다.

DecimalFormat 과 NumberFormat의 차이점은 소수점 유무에 있다.

double num2 = 4.5782189464E8; // 1.7E+/-308(15개의 자릿수)
log.info("지수 출력 : {}", num2);

BigDecimal bigDecimal = new BigDecimal(num2);
log.info("지수를 정수로 출력 : {}", bigDecimal);

log.info("decFormat 지수 표현 : {}", decFormat.format(num2));
log.info("numberFormatUS 지수 표현 : {}", numberFormatUS.format(num2));

[결과]

지수 출력 : 4.5782189464E8
지수를 정수로 출력 : 457821894.63999998569488525390625
decFormat 지수 표현 : 457,821,895
numberFormatUS 지수 표현 : 457,821,894.64

 

4. 타국의 숫자 표현방식 사용하기

이탈리아와 프랑스의 숫자표기법을 출력해봤다.

이탈리아는 점으로 3자리를 나누고 프랑스는 띄어쓰기로 나눈다.

오잉? 신기하다.

NumberFormat numberFormatItaly = NumberFormat.getInstance(Locale.ITALY);
log.info("numberFormatItaly 지수 표현 : {}", numberFormatItaly.format(num2));

NumberFormat numberFormatFrance = NumberFormat.getInstance(Locale.FRANCE);
log.info("numberFormatFrance 지수 표현 : {}", numberFormatFrance.format(num2));

[결과]

numberFormatItaly 지수 표현 : 457.821.894,64
numberFormatFrance 지수 표현 : 457 821 894,64

 

5. NumberFormat

메서드는 모두 NumberFormat 클래스에 있는 메서드를 사용한다.

알고보니 DecimalFormat 이 NumberFormat을 상속받고있었다.

아래처럼 정수를 넣으면 format(long number) 메서드가, 

지수를 넣으면 format(double number) 메서드가 발동한다.

[결론]

정수표현은 편한것을 사용하면 되고,

지수표현할 때는 소수점 이하를 나오게 할거면 NumberFormat을 쓰고,

소수점 이하를 올릴거면 DecimalFormat을 쓰면 될것같다.

 

 

Reference

https://jsonobject.tistory.com/466

https://blog.naver.com/PostView.nhn?blogId=windboy83&logNo=220684213153

https://codechacha.com/ko/java-number-format-comma/

반응형

댓글