繁体   English   中英

使用 numberformatter 将字符串快速转换为双精度返回 nil

[英]Swift converting string to double with numberformatter returns nil

我正在尝试转换用户输入的文本字段的值。 由于用户也可以输入欧洲数字格式的十进制值,因此我使用 numberformatter。 这就是我正在尝试的:

let newprice = MaximumPriceLabel.text as! String
print(newprice) -> result: Optional("10,00")
print(formatter.number(from: newprice as String)) -> result: nil
print(Double(formatter.number(from: ("10,11"))!)) -> result: 10.11 -> that is what I want

所以在变量newprice中存储了一个值,但是在格式化时,它返回nil。 当我使用手动值对其进行测试时,它可以工作。 有什么我做错了吗? Formatter.local 设置为 Locale.current。

更新:问题似乎是 MaximumPriceLabel.text 不仅包含我需要的值,而且真的包含文本 "Optional("10,00") - 转换为数字时失败。该值填充如下:

 self.MaximumPriceLabel.text = String(describing: formatter.string(from: NSNumber(value: desprice)))

当我之后打印时,即使我先清除变量 MaximumPriceLabel.text ,我也会收到“Optional("Optional(\\"10,00\\")")" -> 。

你需要学习如何处理可选项。

您的第一个问题是如何设置标签的文本。 请注意NumberFormatter string(from:)返回一个可选的String 永远不要使用String(describing:)向用户显示信息。 那应该只用于调试。

从改变开始:

self.MaximumPriceLabel.text = String(describing: formatter.string(from: NSNumber(value: desprice)))

到:

if let text = formatter.string(from: NSNumber(value: desprice)) {
    MaximumPriceLabel.text = text
}

这将解决标签文本包含文本Optional(...)

然后将标签文本转换回字符串的代码需要更新为:

if let newprice = MaximumPriceLabel.text {
    if let price = formatter.number(from: newprice) {
        print("The price is \(price)")
    } else {
        print("Invalid number: \(newprice)")
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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