当用户输入逗号而不是点时我的应用程序崩溃了?
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,或者编写更详尽的转换逻辑。
好的,我正在创建一个货币转换器应用程序。 当用户输入他想要转换的值,并用逗号而不是点键入“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,或者编写更详尽的转换逻辑。