【发布时间】:2019-03-11 13:54:18
【问题描述】:
我正在尝试转换用户输入的文本字段的值。由于用户也可以输入欧洲数字格式的十进制值,因此我使用 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)))
当我之后进行打印时,我收到“Optional("Optional(\"10,00\")")" -> 即使我先清除变量 MaximumPriceLabel.text。
【问题讨论】:
-
不相关,但为什么要将定义为
String(?)的text属性转换为String,然后再转换为String? -
根据我的回答下方的 cmets,您需要使用设置
MaximumPriceLabel标签的text属性的代码更新您的问题。看来您的标签实际上包含文本Optional(...),当然这样的文本不是有效数字。因此,您的解决方案是修复设置标签的代码,以便标签的文本仅包含数字本身,而不包含Optional(...)部分。 -
这个
desprice变量是什么?它是如何声明/初始化的? -
当我打印 desprice 时,我得到 10.0。 desprice 由一个返回值类型为 double 的函数填充。让 desprice = getDesiredPrice(checkString: myVariables.ASIN)
-
解决了!非常感谢你们的热心帮助,感谢你们所有人。