Ger*_*tan 2 localization number-formatting swift
我在 UITextField 的屏幕上显示一个 Double 数字作为字符串。编辑后,我将其转换回双精度。
这是一个省略 UITextField 的单元测试方法:
func testFoundationDouble() {
let locales: [NSLocale] = [NSLocale(localeIdentifier: "en_US"), NSLocale(localeIdentifier: "de_DE")]
let numbers: [Double] = [0.0000001, 0.1, 1, 100000000]
for locale in locales {
let nf = NSNumberFormatter()
nf.locale = locale
nf.maximumSignificantDigits = 5
nf.minimumSignificantDigits = 1
for number in numbers {
if let str = nf.stringFromNumber(number) {
if let d = Double(str) {
XCTAssertEqual(number, d , "numberst must be equal. original: \(number), String: \(str) converted: \(d), locale: \(locale.localeIdentifier)")
} else {
XCTFail("cant interpret \(str) as Double, locale: \(locale.localeIdentifier)")
}
} else {
XCTFail("cant format \(number) with locale \(locale.localeIdentifier)")
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
测试结果:
本质上,NSNumberFormatter 可以很好地将 Double 转换为给定语言环境的 String。
将此字符串转换回 Double 失败,因为 Double(str) 需要 en_US 语言环境中的字符串。
如何进行从 String 到 Double 的转换,以便
doubleValue == toDouble(nf.stringFromNumber(doubleValue))
Run Code Online (Sandbox Code Playgroud)
对于任何给定的语言环境?
要根据语言环境将字符串转换为数字,只需再次使用数字格式化程序,即替换
if let d = Double(str) {
Run Code Online (Sandbox Code Playgroud)
经过
if let d = nf.numberFromString(str) {
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1697 次 |
| 最近记录: |