일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- rxjava #kotlin #debounce #rxjava 응용 #rxbinding
- oberve url
- DataBinding
- swift #swift keychain #keychain 사용법
- pod install
- 개발자 면접
- UIViewControllerTransitioningDelegate
- UIPresentationController
- url 관찰
- swift
- convert base64
- 기존 앱
- 스크롤 탭
- Xcode 단축키
- GeometryReader
- detect url
- wkwebview
- Side Menu
- ios
- development language
- DevelopmentRegion
- 상단 탭바
- url 추적
- transformation.map
- editTextInputFilter # kotlin #ime #edittext #android #ineoption
- scrolling tab
- notifychanged
- base64 변환
- Android
- List
- Today
- Total
버그 잡이
swift - NumberFormatter 알아보기. #콤마 표시 #소수점 다루기 본문
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