반응형
문자열 숫자에 3자리마다 콤마를 넣을 때 사용할 함수를 알아보자
extension String {
var commas: String {
guard self.isEmpty == false else { return "" }
// 이미 ','가 존재하면 제거
let str = replacingOccurrences(of: ",", with: "", options: .literal, range: nil)
let numFmt = NumberFormatter()
numFmt.numberStyle = .decimal
// 포멧 적용 소수점 이하 자릿수
// 소수점 이하 최대 7자리까지만 적용되며 반올림 된다.
numFmt.maximumFractionDigits = 7
// 현재 문자열 숫자를 NSNumber객체로 변환
let num = numFmt.number(from: str)
// 3자릿수마다 콤마 삽입
return numFmt.string(for: num) ?? str
}
}
/*
let s = "1234567890.123456789".commas
print("\(s)")
let s2 = "1234567890".commas
print("\(s2)")
결과 :
1,234,567,890.1234567
1,234,567,890
*/
소수점 이하 7자리까지만 지원된다는 문제가 있지만 일반적으로 사용하는데 문제없을 듯하다.
maximumFractionDigits 참조 :
https://developer.apple.com/documentation/foundation/numberformatter/1415364-maximumfractiondigits
만약 소수점 이하 자릿수 제한 없이 구현해야 한다면 다음 함수를 이용하자.
extension String {
var commas : String {
guard self.isEmpty == false else { return "" }
let str = replacingOccurrences(of: ",", with: "", options: .literal, range: nil)
// 소수점을 기준으로 토큰 분리
let strArr = str.components(separatedBy: ".")
guard strArr.count > 0 else { return self }
guard strArr[0].isNumber else { return self }
let numFmt = NumberFormatter()
numFmt.numberStyle = .decimal
let num = numFmt.number(from: strArr[0])
var numStr = numFmt.string(from: num) ?? strArr[0]
if strArr[1].isEmpty == false {
numStr.append(".\(strArr[1])")
}
return numStr
}
}
/*
let s = "1234567890.123456789".commas
print("\(s)")
결과 :
1,234,567,890.123456789
*/
소수점 이하 자릿수 제한 없이 사용 가능하다.
반응형
'개발 > iOS' 카테고리의 다른 글
NSURLSessionTask 캐싱 비활성화 (0) | 2022.10.24 |
---|---|
UIScrollView 스크린샷 만들기 (0) | 2022.10.24 |
유니버셜 링크(Universal Links) 문제점 해결 (0) | 2022.07.21 |
웹 저장 데이터 (Cookie, Cache) 삭제 (0) | 2021.09.24 |
버전분기 샘플 (0) | 2021.08.02 |