[英]Converting String to Double respecting NSLocale in Swift
我在UITextField的屏幕上将Double数字显示为String。 编辑后,我将其转换回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)")
}
}
}
}
测试结果:
本质上,对于给定的语言环境,NSNumberFormatter可以很好地将Double转换为String。
将此字符串转换回Double失败,因为Double(str)期望该字符串在en_US语言环境中使用。
我该如何从String转换为Double,以便
doubleValue == toDouble(nf.stringFromNumber(doubleValue))
对于任何给定的语言环境?
要将字符串根据语言环境转换为数字,只需再次使用数字格式器即可,即替换
if let d = Double(str) {
通过
if let d = nf.numberFromString(str) {
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.