私の目標は単純です。ローカライズされた通貨値 (たとえば $1,000.00) を格納するテキストフィールドがあり、テキストフィールドでテストを実行するために、テキストフィールドからその値を float として取得する必要があります。
コードは非常に単純です。最初に、次のように NSNumber を localizedString にフォーマットします。
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;
問題は、フォーマッタが文字列の整数値のみを返し、小数点以下を返さないことです。さらに悪いことに、カナダのローカライズされた文字列 (20 000,00 $) の場合、20 しか返されません。
私はしばらくの間検索してきましたが、この動作について何も見つかりません。回避策はもちろん、テキストフィールドにフォーマットする直前に NSNumber を保存してから、この nsnumber をテストすることですが、私は本当にそれがきれいだとは思いません。