我正在尝试使用UILabel
为NSNumberFormatter
格式化所选区域设置的NSNumberFormatterStyle.DecimalStyle
文本,并将格式化程序的区域设置设置为ar-SA
。
当UILabel
文本有大数字转换为E表示法(科学记数法)时,例如 - " 1e9"," 2.3456e24"等numberFromString()
为nil
区域设置返回ar-SA
。但是,它适用于其他语言环境。
@IBOutlet weak var displayText: UILabel!
let format = NSNumberFormatter()
format.numberStyle = NSNumberFormatterStyle.DecimalStyle
format.locale = NSLocale(localeIdentifier: language)// where language = "ar-SA" or "en-US" or "de-DE"
format.maximumFractionDigits = 16
var result = displayText.text! // result = "1e9" or "2.3456e24"
guard let number = format.numberFromString(result), let string = format.stringFromNumber(number) else {
displayText.text = "Error"
return
}
result = string
如何解决这个问题? ar-SA
语言环境和E符号是否存在限制?
答案 0 :(得分:2)
您可以将号码转换为" en"语言环境,之后将结果字符串转换为" ar_SA"语言环境。显然," ar_SA"区域设置无法识别" e"符号
let format = NSNumberFormatter()
format.numberStyle = NSNumberFormatterStyle.DecimalStyle
format.locale = NSLocale(localeIdentifier: "en")
format.maximumFractionDigits = 16
var result = displayText.text!
guard let number = format.numberFromString(result), let string = format.stringFromNumber(number) else {
return
}
format.locale = NSLocale(localeIdentifier: "ar_SA")
guard let string2 = format.stringFromNumber(number) else {
return
}
result = string2
答案 1 :(得分:1)
如果您使用具有科学风格和阿拉伯语区域设置的NSNumber
格式化NSNumberFormatter
,您会看到需要输入2.3456e24
等数字作为٢٫٣٤٥٦اس٢٤
}。
尝试解析2.3456e24
仅适用于使用数字0-9
,句点以及指数的e
或E
的区域设置。
如果您希望允许用户以各种格式输入数字,则需要尝试使用多个区域设置的数字格式化程序。从默认语言环境开始。如果它返回nil
个号码,请尝试其他语言环境。尝试尽可能多的语言环境。