【问题标题】:Swift converting string to double with numberformatter returns nil使用 numberformatter 将字符串快速转换为 double 返回 nil
【发布时间】: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)
  • 解决了!非常感谢你们的热心帮助,感谢你们所有人。

标签: ios swift


【解决方案1】:

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

您的第一个问题是如何设置标签的文本。请注意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)")
    }
}

【讨论】:

  • 我试过这个 - 我得到“无效号码:可选(“10,00”)” - 我不明白为什么:(
  • 您的标签中似乎实际上包含文本Optional(...)。显然这样的文本不是一个有效的数字。你如何设置标签的文字?
  • 这可能是。它由用户输入填充,来自十进制键盘。
  • 这不能回答我的问题。你用什么代码来设置标签的文字?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-13
  • 2015-02-25
  • 1970-01-01
  • 2015-04-09
  • 1970-01-01
  • 2021-10-04
  • 1970-01-01
相关资源
最近更新 更多