2016-12-30 122 views
1

当用户处于不同的语言环境时,我有以下iOS计算问题。在欧洲,小数点分隔符是“,”而在其他地区可能是“。”。只要用户使用“。”的语言环境所有的计算都可以正常工作,但是当使用逗号时,我会得到一个错误。下面是简单的代码至今:如何解决计算中的语言环境小数点/逗号导致的iOS错误? (与NumberFormatter)

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

有人可以给我一个小费? 感谢

+0

当向用户提供号码时,您必须使用'NSNumberFormatter'。解析时,通常只需用'.'替换所有的'''。 – Sulthan

+0

这很好,但我必须承认,我没有想到这个解决方案,因为它对我来说似乎不是最优雅的。我用下面给回一个字符串: – RjC

+0

让的CurrencyFormatter =的NumberFormatter() currencyFormatter.usesGroupingSeparator =真 currencyFormatter.numberStyle = NumberFormatter.Style.currency currencyFormatter.locale = NSLocale.current 让PRICESTRING = currencyFormatter.string(为:结果) print(priceString ?? 0) – RjC

回答

0

你唯一需要的是正确书写方法调用:

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

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

+0

您仍然必须将'NSNumber'转换为'Double'。 (并且每次转换都不需要单独的格式化程序。) –

+0

@MartinR是的,他也不需要'String(费用)'。 – Sulthan

相关问题