반응형

iOS에서 세 자리수 마다 콤마(,) 넣기

정수 값을 세자리수 마다 콤마를 넣는 방법은 다음과 같다.

let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal

let price = 10005000
let result = numberFormatter.string(from: NSNumber(value:price))!
print(result) // "10,005,000"

문자열 값에 콤마를 넣고 싶으면, 문자열을 숫자형으로 변환하고 나서 처리 하면 된다.

let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
    
let price = Double("10005000")!
let result = numberFormatter.string(from: NSNumber(value:price))!
print(result) // "10,005,000"

이것으로 모든게 잘 해결되는 줄 알았는데…
소수점이 들어갔을때, 최대 소수점 3자리까지만 출력이… OTL

 let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
    
let price = Double("10005000.123456789")!
let result = numberFormatter.string(from: NSNumber(value:price))!
print(result) // "10,005,000.123"

소수점 자릿수를 그대로 유지하기 위해 String을 Extension 하였다.

extension String {
    /**
     숫자형 문자열에 3자리수 마다 콤마 넣기
     Double형으로 형변환 되지 않으면 원본을 유지한다.
     
     ```swift
     let stringValue = "10005000.123456789"
     print(stringValue.insertComma)
     // 결과 : "10,005,000.123456789"
     ```
     
     */
    var insertComma: String {
        let numberFormatter = NumberFormatter();
        numberFormatter.numberStyle = .decimal
        
        // 소수점이 있는 경우 처리
        if let _ = self.range(of: ".") {
            var numberArray = self.components(separatedBy: ".")
            if numberArray.count == 1 {
                var numberString = numberArray[0]
                if numberString.isEmpty {
                    numberString = "0"
                }
                
                guard let doubleValue = Double(numberString) else {
                    return self
                }
                
                return numberFormatter.string(from: NSNumber(value: doubleValue)) ?? self
                
            } else if numberArray.count == 2 {
                var numberString = numberArray[0]
                if numberString.isEmpty {
                    numberString = "0"
                }
                
                guard let doubleValue = Double(numberString) else {
                    return self
                }
                
                return (numberFormatter.string(from: NSNumber(value: doubleValue)) ?? numberString) + ".\(numberArray[1])"
            }
        } else {
            guard let doubleValue = Double(self) else {
                return self
            }
            
            return numberFormatter.string(from: NSNumber(value: doubleValue)) ?? self
        }
        return self
    }
}

코드는 좀 더 개선할 필요가 있지만, 이제 문자열에 콤마(`,) 넣는것을 쉽게 사용 할 수 있다.

"10005000.123456789".insertComma
// 결과 : "10,005,000.123456789"


반응형

'iOS > Tip' 카테고리의 다른 글

Cookies 저장과 값 읽기  (0) 2016.11.28
UIView, UIWebView 캡쳐하기  (0) 2016.11.04
TextView, TextField에 메뉴 추가 하기  (0) 2016.10.14
아이폰 개발 기준 해상도  (1) 2016.10.14
iOS 앱 이름과 버전 정보 가져오기  (0) 2016.10.11
iOS 10에서 Privacy 설정  (1) 2016.10.10
문자열을 URL 타입으로 인코딩 하기  (0) 2016.10.06
Apple App ID  (0) 2016.09.30
Posted by 까칠코더
,