当用户处于不同的区域设置时,iOS计算存在以下问题。在欧洲,小数点分隔符是“,”,而在其他语言环境中,它可能是“。”。只要用户位于具有“。”的语言环境中。所有计算都可以正常工作,但是当使用逗号时我得到一个错误。到目前为止,这是简单的代码:
if let expense = expenseTextField.text
let expenseValue = Double(expense)
let guests = guestTextField.text
let guestValue = Double(guests) {
let result = round((expenseValue / guestValue) * 100) / 100
resultLabel.text = priceString
//resultLabel.text = String(result)
} else {
resultLabel.text = "No values!"
}
我很确定我必须使用numberFormatter,据我所知其他问题,但我不知道如何做到这一点,文档没有提供如何创建double或float的示例一个字符串。我尝试了以下但是我得到一个错误,指出我既不能创建双打也不能使用这些变量进行计算:
if let expense = expenseTextField.text
let expenseValue = String(expense),
let guests = guestTextField.text
let guestValue = String(guests) {
let expenseFormatter = NumberFormatter()
expenseFormatter.number(from: expenseValue)
let guestFormatter = NumberFormatter()
guestFormatter.number(from: guestValue)
let expenseDouble = Double(expenseFormatter)
let guestDouble = Double(guestFormatter)
let result = round((expenseDouble / guestDouble) * 100) / 100
resultLabel.text = priceString
} else {
resultLabel.text = "No values!"
}
我不确定如何使用numberFormatter从这些字符串创建真正的双打,然后在计算中使用它们。
有人可以给我一个提示吗? 谢谢
答案 0 :(得分:0)
您唯一需要的是正确编写方法调用:
let expenseDouble = expenseFormatter.number(from: expenseValue)?.doubleValue ?? 0
let guestDouble = guestFormatter.number(from: guestValue)?.doubleValue ?? 0
格式化程序/解析器直接将字符串转换为number
。然后,您必须从中获取Double
值。请注意,解析可能会失败,您必须在这种情况下解决生成的可选项,例如使用?? 0
。