如何在计算中使用区域设置小数点/逗号解决iOS错误? (使用NumberFormatter)

时间:2016-12-30 12:55:24

标签: ios swift locale numberformatter

当用户处于不同的区域设置时,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从这些字符串创建真正的双打,然后在计算中使用它们。

有人可以给我一个提示吗? 谢谢

1 个答案:

答案 0 :(得分:0)

您唯一需要的是正确编写方法调用:

let expenseDouble = expenseFormatter.number(from: expenseValue)?.doubleValue ?? 0
let guestDouble = guestFormatter.number(from: guestValue)?.doubleValue ?? 0

格式化程序/解析器直接将字符串转换为number。然后,您必须从中获取Double值。请注意,解析可能会失败,您必须在这种情况下解决生成的可选项,例如使用?? 0