2012-11-14 9 views
5

私の目標は簡単です。ローカライズされた通貨値(例えば$ 1,000.00)を格納するテキストフィールドがあり、その値を浮動小数点として返す必要がありますテキストフィールドObjective-Cで通貨文字列をfloatに変換する

コードでは、まず、私はそうとlocalizedStringへのNSNumberをフォーマットし、本当に簡単です:

NSNumberFormatter* formatter = [[NSNumberFormatter alloc] init]; 
formatter.locale = [NSLocale currentLocale]; 
formatter.numberStyle = NSNumberFormatterCurrencyStyle; 
textfield.text = [formatter stringFromNumber:number]; 

すべてが正常に動作しますが、その後、私は、このローカライズされた文字列からのdoubleValueを取得するために、反対の操作を行います。

NSNumberFormatter* formatter = [[NSNumberFormatter alloc] init]; 
formatter.locale = [NSLocale currentLocale]; 
formatter.numberStyle = NSNumberFormatterCurrencyStyle; //also tested with NSNumberFormatterDecimalStyle 

double d = [formatter numberFromString:textfield.text].doubleValue; 

問題は、それがカナダのlocalizedstring(20 000,00 $)であれば、それは唯一の20

を返し、フォーマッタは私の文字列の整数値ではなく小数を返すこと悪いです

私はしばらく時間を探していて、この動作について何も見つかりませんでした。回避策はもちろん、NSNumberをテキストフィールドに書式設定する前に格納してから、このnsnumberをテストすることですが、実際にはそれほど見つからないのです。

+1

あなたはこの[ロケール固有の文字列からNSDecimalNumberを取得] [1]について見ることができ [1]:http://stackoverflow.com/questions/317311/obtaining-an-nsdecimalnumber-from-a-locale-specific-string –

答えて

0

ジュゼッペが指摘しているように、答えは本当にシンプルで、私はそれを考えないために壁に頭を向けています。

var locale = NSLocale.currentLocale() 
    var formatter = NSNumberFormatter() 
    formatter.locale = NSLocale(localeIdentifier: "en_US") 
    formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle 

    var moneyDouble = formatter.numberFromString(textField.text)?.doubleValue 
+0

あなたの元の価格文字列が通貨記号が含まれている場合(例: @ "$ 9.99")、zvtraの答えが正しい(Using the NSNumberFormatter)。 – dornad

3

スウィフトでは、あなたは同様に通貨のフォーマットにロケールを設定して、取得ダブルでこれを行うことができますen_US(スイフト2)であることがロケール識別子を強制しない。

func floatFromTextFieldText() -> Float { 
    let formatter = NSNumberFormatter() 
    formatter.locale = NSLocale.currentLocale() 
    formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle 
    guard let amount = self.text else { return 0.0 } 
    return formatter.numberFromString(amount)!.floatValue 
} 
0

floatを返すzavtraの答えにわずかな向上と:

double d = [NSDecimalNumber decimalNumberWithString:textfield.text locale:[NSLocale currentLocale]].doubleValue; 
関連する問題