繁体   English   中英

在Swift中将字符串转换为Double尊重NSLocale

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM