NSNumberFormatter.numberFromString() [=ga=] nil 对于 r-sa 语言环境
NSNumberFormatter.numberFromString() returns nil for ar-SA locale
我正在尝试使用 NSNumberFormatter
为 NSNumberFormatterStyle.DecimalStyle
格式化所选语言环境的 UILabel
文本,并将格式化程序的语言环境设置为 ar-SA
。
当 UILabel
文本中的大数字被转换为 E 表示法(科学记数法),例如“1e9”、“2.3456e24”等。numberFromString()
returns 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 符号一起使用有什么限制吗?
如果您使用具有科学风格和阿拉伯语区域设置的 NSNumberFormatter
来格式化 NSNumber
,您将看到 2.3456e24
之类的数字需要输入为 ٢٫٣٤٥٦اس٢٤
.
尝试解析 2.3456e24
仅适用于使用数字 0-9
、句点和 e
或 E
作为指数的语言环境。
如果您希望允许用户输入各种格式的数字,您将需要尝试使用多种语言环境的数字格式化程序。从默认语言环境开始。如果返回 nil
数字,请尝试其他语言环境。尝试尽可能多的语言环境。
您可以将数字转换为 "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
我正在尝试使用 NSNumberFormatter
为 NSNumberFormatterStyle.DecimalStyle
格式化所选语言环境的 UILabel
文本,并将格式化程序的语言环境设置为 ar-SA
。
当 UILabel
文本中的大数字被转换为 E 表示法(科学记数法),例如“1e9”、“2.3456e24”等。numberFromString()
returns 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 符号一起使用有什么限制吗?
如果您使用具有科学风格和阿拉伯语区域设置的 NSNumberFormatter
来格式化 NSNumber
,您将看到 2.3456e24
之类的数字需要输入为 ٢٫٣٤٥٦اس٢٤
.
尝试解析 2.3456e24
仅适用于使用数字 0-9
、句点和 e
或 E
作为指数的语言环境。
如果您希望允许用户输入各种格式的数字,您将需要尝试使用多种语言环境的数字格式化程序。从默认语言环境开始。如果返回 nil
数字,请尝试其他语言环境。尝试尽可能多的语言环境。
您可以将数字转换为 "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