Преобразование строки в валюту Swift - PullRequest
0 голосов
/ 23 ноября 2018

У меня проблемы с преобразованием массива строк в валюту.

enter image description here

enter image description here

Я создал расширение currencyInputFormatting (), однако запятые находятся в неправильных местах.

Вот мой код для добавления валюты в мой текст.

cell.balanceLabel.text? = (monthlyBalanceStringArray)[indexPath.row].currencyFormatting()


extension String {

// formatting text for currency textField
func currencyFormatting() -> String {

    var number: NSNumber!
    let formatter = NumberFormatter()
    formatter.numberStyle = .currency
    formatter.maximumFractionDigits = 2

    var amountWithPrefix = self

    let regex = try! NSRegularExpression(pattern: "[^0-9]", options: .caseInsensitive)
    amountWithPrefix = regex.stringByReplacingMatches(in: amountWithPrefix, options: NSRegularExpression.MatchingOptions(rawValue: 0), range: NSMakeRange(0, self.characters.count), withTemplate: "")

    let double = (amountWithPrefix as NSString).doubleValue
    number = NSNumber(value: (double))

    //        number = NSNumber(value: (double / 100))


    guard number != 0 as NSNumber else {
        return ""
    }

    return formatter.string(from: number)!

}

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Вам не нужно заменять какие-либо символы с помощью регулярных выражений.Просто используйте NSNumberFormatter

extension String {
    // formatting text for currency textField
    func currencyFormatting() -> String {
        if let value = Double(self) {
            let formatter = NumberFormatter()
            formatter.numberStyle = .currency
            formatter.maximumFractionDigits = 2
            if let str = formatter.string(for: value) {
                return str
            }
        }
        return ""
    }
}

"74154.7".currencyFormatting()            // $74,154.70

"74719.4048014544".currencyFormatting()   // $74,719.40
0 голосов
/ 23 ноября 2018

Попробуйте это

extension String {

    // formatting text for currency textField
    func currencyFormatting() -> String {

        var number: NSNumber!
        let formatter = NumberFormatter()
        formatter.numberStyle = .currency
        formatter.maximumFractionDigits = 2

        var amountWithPrefix = self

        let regex = try! NSRegularExpression(pattern: "[^0-9.]", options: .caseInsensitive)
        amountWithPrefix = regex.stringByReplacingMatches(in: amountWithPrefix, options: NSRegularExpression.MatchingOptions(rawValue: 0), range: NSMakeRange(0, self.characters.count), withTemplate: "")

        let double = (amountWithPrefix as NSString).doubleValue
        number = NSNumber(value: (double))

        //        number = NSNumber(value: (double / 100))


        guard number != 0 as NSNumber else {
            return ""
        }

        return formatter.string(from: number)!
    }
}
...