用于在Swift 3中将英文编号转换为波斯语或阿拉伯语数字的NSFormatter

时间:2017-05-16 05:34:03

标签: ios swift3 number-formatting nsformatter

我在这里阅读了类似的问题并在我的应用程序中写了这个方法

        let formatter = NumberFormatter()

    func convertEngNumToPersianNum(num: String)->String{
        let number = NSNumber(value: Int(num)!)
        let format = NumberFormatter()
        format.locale = Locale(identifier: "fa_IR")
        let faNumber = format.string(from: number)

        return faNumber!


    }

我没有得到错误但我也没有得到结果!

我的号码是:

let checkNumber = Home2ViewController().customtitle.count
    personalCustom.text = ("\(checkNumber)")

我在另一个可用的View Controller中使用了另一个数字但是我想用波斯语或阿拉伯语数字格式显示这个数字而不是英文格式

4 个答案:

答案 0 :(得分:2)

试试这个:

func convertEngNumToPersianNum(num: String)->String{
        //let number = NSNumber(value: Int(num)!)
        let format = NumberFormatter()
        format.locale = Locale(identifier: "fa_IR") 
        let number =   format.number(from: num)
        let faNumber = format.string(from: number!)
        return faNumber!

    }

或使用您的行重新

        let number =   format.number(from: num)
    let faNumber = format.string(from: number!)

答案 1 :(得分:2)

你可以做点什么,

    let formatter = NumberFormatter()
    formatter.locale = NSLocale.current   // you can specify locale that you want
    formatter.numberStyle = .decimal
    formatter.usesGroupingSeparator = true



    let number = formatter.number(from: "١٠.٠٠")

    print(number ?? "")

答案 2 :(得分:1)

在保持前导零的同时转换为阿拉伯语

func convertToArDigits(_ digits: String) -> String {
            // We need a CFMutableString and a CFRange:
            let cfstr = NSMutableString(string: digits) as CFMutableString
            var range = CFRange(location: 0, length: CFStringGetLength(cfstr))
            // Do the transliteration (this mutates `cfstr`):
            CFStringTransform(cfstr, &range, kCFStringTransformLatinArabic, false)
            // Convert result back to a Swift string:
            return (cfstr as String)
        }

答案 3 :(得分:1)

   extension String {
public var faToEnDigits : String {
    let farsiNumbers = ["٠": "0","١": "1","٢": "2","٣": "3","٤": "4","٥": "5","٦": "6","٧": "7","٨": "8","٩": "9"]
    var txt = self
    farsiNumbers.map { txt = txt.replacingOccurrences(of: $0, with: $1)}
    return txt
}
public var enToFaDigits : String {
    let englishNumbers = ["0": "۰","1": "۱","2": "۲","3": "۳","4": "۴","5": "۵","6": "۶","7": "۷","8": "۸","9": "۹"]
    var txt = self
    englishNumbers.map { txt = txt.replacingOccurrences(of: $0, with: $1)}
    return txt
}
}