일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- url 추적
- SwiftUI
- swift
- DevelopmentRegion
- convert base64
- development language
- Swift Package Manager
- 스크롤 탭
- List
- 기존 앱
- GeometryReader
- detect url
- pod install
- url 관찰
- Tuist
- 상단 탭바
- ios
- swift #swift keychain #keychain 사용법
- DataBinding
- notifychanged
- scrolling tab
- base64 변환
- UIViewControllerTransitioningDelegate
- transformation.map
- ViewBuilder
- Side Menu
- oberve url
- Android
- 개발자 면접
- UIPresentationController
- 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