从String转换为Double导致Swift崩溃

时间:2017-11-29 21:39:47

标签: ios swift parsing type-conversion nsnumberformatter

我试图转换一个文本字段的文本,因为十进制数字键盘键盘只能是数字。

我正在使用的变量:

static var selectedMoneyMissing: Double = 30.0

let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.maximumFractionDigits = 2
formatter.roundingMode = .down

let roundedReplacing = formatter.string(from: NSNumber(value: Double(textField.text!.replacingOccurrences(of: ",", with: "."))!))

let roundedReplacingSecond = roundedReplacing.replacingOccurrences(of: " ", with: "")
print(roundedReplacing)
print(roundedReplacingSecond)

FiltersViewController.selectedMoneyMissing = Double(roundedReplacingSecond)!

我得到"意外地发现没有......"错误:

screenshot

只有在我输入值> = 1000时才会出现此错误。所以我认为可能是因为whitespace这就是为什么存在roundedReplacingSecond变量的原因。但它仍然不起作用(实际上,我不知道为什么控制台正在打印变量" roundedReplacingSecond"用空格?)。

1 个答案:

答案 0 :(得分:1)

您应该配置NumberFormatter更严格的限制,特别是禁止使用分组和千位分隔符:

formatter.groupingSeparator = false
formatter.hasThousandSeparator = false

有关更多属性,请参阅文档。然后根本不需要进行文本替换,这可能会因用户区域设置而中断。