버그 잡이

swift - NumberFormatter 알아보기. #콤마 표시 #소수점 다루기 본문

카테고리 없음

swift - NumberFormatter 알아보기. #콤마 표시 #소수점 다루기

버그잡이 2020. 9. 2. 22:06

NumberFormatter란?

숫자값과 문자적 표현 사이를 변환해주는 formatter 입니다.

 

NumberFormatter를 통해서 어떤 작업을 할 수 있을까요?

 

 

 

세자리수 마다 콤마 넣기

 

NumberFormatter객체의 numberStyle을 .decimal로 설정함으로써 콤마를 찍을 수 있습니다.

let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
let price = 12345678
let result = numberFormatter.string(for: price)!

print(result)   //12,345,678

 

그런데 이 방법은 문제가 있습니다.

소수점을 가지고 있을 때, 소수점이 최대 3자리까지 밖에 표현이 안 됩니다. (default가 3으로 지정되어 있는 것 같습니다.)

 

이때는 maximumFractionDigits를 활용하여 최대로 표현되는 소수점 자리수를 결정할 수 있습니다.

//기존
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
let price = 12345678.12345
let result = numberFormatter.string(for: price)!

print(result)   //12,345,678.123


//소수점 최대 자리수 지정
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
numberFormatter.maximumFractionDigits = 10
let price = 12345678.12345678
let result = numberFormatter.string(for: price)!

print(result)   //12,345,678.12345678

 

 

추가적으로 .maximumFractionDigits = -2 로 할 경우 소수점 자리수에 제약 없이 출력되는 것을 볼 수 있습니다.

 

 

 

소수점 처리

 

//*소수점 버리기
let numberFormatter = NumberFormatter()
numberFormatter.roundingMode = .floor         // 버림 형식
numberFormatter.maximumSignificantDigits = 2  // 자르길 원하는 자릿수

let value = 3.141234
let valueFormatted = numberFormatter.string(for: value)  
print(valurFormatter) //Optional(3.1)


//*소수점 필수적으로 표현하기
let numberFormatter = NumberFormatter()
numberFormatter.roundingMode = .floor         // 버림 형식
numberFormatter.minimummumSignificantDigits = 4  

let value = 3.1
let valueFormatted = numberFormatter.string(for: value)  
print(valurFormatter) //Optional(3.100)

*numerFormatter로 처리된 값은 optional로 반환되기 때문에 이후 옵셔널 바인딩을 해줘야 합니다.

*roundingMode에는 floor 말고도 up, down, ceiling 등 다양한 처리가 가능합니다.

 

 

기타

 

위와 같이 소수점 처리 말고 integer 자릿수 편집도 가능합니다.

또, numberStyle을 보면 아래와 같은 다양한 format이 가능하니 유용하게 쓰일 수 있을 것 같습니다.

.percent → 30%

.currency → $10,000,000

.spellOut → ten thousand

 

 

 

*참고

https://medium.com/@twih1203/swift5-numberformatter로-소수점-아래-자릿수-반올림-없이-자르기-ee33219e3cdd

 

반응형
Comments