![](/img/trans.png)
[英]Swift - NumberFormatter Number from string returns nil for iPhone 8 but works for other device
[英]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.