1

当用户处于不同的语言环境时,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 ,但我不知道如何做到这一点,并且文档没有提供如何从字符串创建双精度或浮点数的示例。我尝试了以下方法,但收到一条错误消息,指出我既不能创建双打也不能使用这些变量进行计算:

 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 从这些字符串创建真正的 Doubles,然后在计算中使用它们。

有人可以给我小费吗?谢谢

4

1 回答 1

0

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

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

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

于 2016-12-30T13:04:28.853 回答