2016-12-30 3 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を使用する必要がありますかなり確信しているが、私はこれを行う方法を取得しないと、ドキュメントがありません文字列から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

ユーザに数字を提示するには、 'NSNumberFormatter'を使用する必要があります。解析時には、通常、 '、'を '.'で置き換えるだけで十分です。 – Sulthan

+0

それはうまくいきましたが、それは私にとって最もエレガントなものではないので、私はその解決策を考えなかったことを認めなければなりません。 – RjC

+0

(currencyFormatter = NumberFormatterは() currencyFormatter.usesGroupingSeparator =真 currencyFormatter.numberStyle = NumberFormatter.Style.currency currencyFormatter.locale = NSLocale.current せPRICESTRING = currencyFormatter.stringを聞かせて:私は、文字列をお返しするために、以下の使用しましたfor:result) 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

関連する問題