>

잠깐 살펴본 후 문제에 대한 적절한 해답을 찾을 수 없었습니다.

제품 pricez의 숫자가 포함 된 문자열이 있습니다. 예를 들어 1000, 500 또는 50입니다. 소수점 2 자리 10.00,5.00 및 0.50

으로 변환하고 싶습니다.

이 작업을 어떻게 수행 할 수 있으며 문자열을 유지하기 위해 int 또는 float로 변환하지 않고도 가능합니까?

  • 답변 # 1

    가격을 정수로 먼저 변환 한 다음 100으로 나눠서 십진수/부동 값을 사용할 수 있습니다. 그런 다음 NSNumberFormatter를 사용하여 문자열로 다시 변환

    업데이트

    let formatter = NumberFormatter()
    formatter.maximumFractionDigits = 2
    formatter.minimumFractionDigits = 2
    formatter.minimumIntegerDigits = 1
    // formatter.decimalSeparator = "." <- optional step
    let double1 = Double(0.5)
    let double2 = Double(100.00)
    let double3 = Double(50.00555)
    print(formatter.string(for: double1))
    print(formatter.string(for: double2))
    print(formatter.string(for: double3))
    // prints
    Optional("0.50")
    Optional("100.00")
    Optional("50.01")
    
    

  • 답변 # 2

    원하는 형식으로 가져 오려면 숫자 문자열을 부동 소수점으로 변환 한 다음 100으로 나누고 문자열을 다시 반환해야합니다.

    아래는 내가 제안한 것에서 수정 한 확장입니다.

    var numberString = "20"
    extension String {
        var decimalString: String? {
            guard let float = Float(self) else { return nil }
            let fraction = float / 100
            return String(format: "%.2f", fraction)
        }
    }
    // You could unwrap the option either this way...
    if let decimalString = numberString.decimalString {
        print(decimalString)
    }
    // or this way...
    print(numberString.decimalString ?? "Invalid value")
    
    

  • 답변 # 3

    NumberFormatter를 사용하고 값을 100으로 나누어야합니다

    다음은 간단한 문자열 확장입니다. 문자열을 Double로 변환 할 수 없으면 문자열 값을 반환합니다.

    extension String {
    var convertToPrice: String? {
        guard let value = Double(self) else { return self }
        let divided = value / 100
        let currencyFormatter = NumberFormatter()
        currencyFormatter.numberStyle = .currency
        currencyFormatter.currencySymbol = ""
        currencyFormatter.decimalSeparator = "."
        if let priceString = currencyFormatter.string(for: divided) {
            return priceString
        }
        return self
    }
    }
    
    

    사용법 :

    "50".convertToPrice // "0.50"
    
    

  • 답변 # 4

    이것이 더 쉽다는 것을 알았습니다 :

    func formatPrice(price: String) -> String{
        let pr = Double(price)!/100
        return String(format: "%.2f",pr)
    }
    usage: formatPrice("1000") //returning 10.00
    
    

관련 자료

  • 이전 regex - 텍스트 블록 단축
  • 다음 python - 다차원 배열을 2D로 변환 및 후속 인덱싱