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 を使用する必要があると確信していますが、これを行う方法がわかりません。ドキュメントには、文字列から double または float を作成する方法のサンプルがありません。次のことを試しましたが、double を作成することも、これらの変数を計算に使用することもできないというエラーが表示されます。

 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 を使用してこれらの文字列から実際の Double を作成し、それらを計算で使用する方法がわかりません。

誰かヒントをくれませんか?ありがとう

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 に答える