当用户输入逗号而不是点时我的应用程序崩溃了?

My App crashes when a user types comma instead of dot?

好的,我正在创建一个货币转换器应用程序。 当用户输入他想要转换的值,并用逗号而不是点键入“9,99”时,应用程序崩溃了。 我怎样才能防止这种情况发生?!

这是我的代码:

@IBAction func changeSteemTextField(_ sender: UITextField) {
    let str = steemTextField.text
    if (str?.isEmpty)! {
        return
    }
    let appDelegate = UIApplication.shared.delegate as! AppDelegate

    let steem = NumberFormatter().number(from: str!)?.doubleValue
    priceTextField.text = String(format: "%.4f", steem! * appDelegate.price_usd * rate)


}

@IBAction func changePriceTextField(_ sender: UITextField) {
    let str = priceTextField.text
    if (str?.isEmpty)! {
        return
    }
    let appDelegate = UIApplication.shared.delegate as! AppDelegate

    let price = NumberFormatter().number(from: str!)?.doubleValue
    steemTextField.text = String(format: "%.0f", price! / appDelegate.price_usd / rate)


    return

这是当您键入逗号而不是点时弹出的错误消息 所以我的想法可能是实施替换代码? 以便系统在用户键入后自动将点替换为逗号。 这是我想出的代码,但为什么它不起作用?

let aString = ","
let newString = aString.replacingOccurrences(of: ",", with: ".")

为了使其工作,您需要将 let str... 更改为 var str 然后更改值。此代码运行良好:

var str = "99.5"

let aString = ","
str = str.replacingOccurrences(of: ",", with: ".")

let price = NumberFormatter().number(from: str)?.doubleValue

应用程序崩溃,因为 NumberFormatter (http://php.net/manual/en/class.numberformatter.php) 一次只能设置为一个区域设置。在这种情况下,它设置为美国,因此它期望逗号仅用于分隔千、百万等(例如 9,999)。因此,9,99 是无效的数字表示形式。

您需要更改str,并确保将str 的更改值(用点替换逗号的值)作为输入。请注意,如果有人输入欧洲格式的数字 9,999.01(即 9.999,01),这将失败。在这种情况下,您将明确需要为两种语言环境调用 NumberFormatter,或者编写更详尽的转换逻辑。