VesselWheel

Double 타입의 숫자를 화폐단위로 표시하기(ex. 5,000원) 본문

Xcode Study

Double 타입의 숫자를 화폐단위로 표시하기(ex. 5,000원)

JasonYang 2024. 1. 2. 19:15

Double값을 가격표에서 천의자리 단위로  변환한 모습

정수 값에 세자리수 마다 콤마를 넣는 방법으로 .numberStyle을 .decimal로 저장한다. 

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

let result = numberFormatter.string(from: NSNumber(value: 1000000))
print(result! + "원")

<NumberFormatter() 내장 클래스를 이용하여 .decimal로 천의 자리 단위로 ' , ' 표시하는 방법>

Double 타입에 대한 확장(extension)으로, "formattedString()"이라는 메소드

extension Double {
    func formattedString() -> String {
        let numberFormatter = NumberFormatter()
        numberFormatter.numberStyle = .decimal
        numberFormatter.minimumFractionDigits = 0

        if let formattedString = numberFormatter.string(from: NSNumber(value: self)) {
            return formattedString
        } else {
            return "\(self)"  
        }
    }
}

이 코드는 Double 타입에 대한 확장(extension)으로, "formattedString()"이라는 메소드를 추가하는 역할을 합니다. 이 메소드는 Double 값을 포맷팅하여 천 단위마다 점을 찍어주는 기능을 제공합니다.

구체적으로는, NumberFormatter 클래스를 사용하여 숫자 포맷을 설정합니다.

numberStyle 속성을 .decimal로 설정하여 숫자를 천 단위로 구분하는 포맷을 지정합니다. minimumFractionDigits 속성을 0으로 설정하여 소수점 이하 자리수를 0으로 표시합니다.

그리고, numberFormatter.string(from:) 메소드를 사용하여 현재 Double 값(self)을 NSNumber로 변환한 뒤, 해당 NSNumber를 포맷에 맞게 문자열로 변환합니다. 변환된 문자열을 반환합니다.

만약 변환된 문자열이 nil이라면, 즉 변환에 실패한 경우에는 "(self)"를 사용하여 기본적인 문자열 표현을 반환합니다.

이렇게 구현된 formattedString() 메소드를 호출하면, 해당 Double 값이 천 단위마다 점으로 구분된 문자열로 반환됩니다.

 

기존에 더블값을 Int으로 변환하고, String으로 변환한 모습

func configure(with item: SpabucksMenuItem) {
        imageView.image = UIImage(named: item.imageName)
        nameLabel.text = item.name
        priceLabel.text = String("\(Int(item.price)) 원")
    }
}

formattedString() 매소드를 호출하여 변환한 모습

    // MARK: - Action Helpers
    
    func configure(with item: SpabucksMenuItem) {
        imageView.image = UIImage(named: item.imageName)
        nameLabel.text = item.name
        priceLabel.text = "\(item.price.formattedString()) 원"
    }
}