2012-01-14 15 views
1

私のNSNumberFormatterは無限桁の代わりに4桁(つまり2,222ポンド)しか使わないのですか?NSNumberFormatterは4桁しか受け入れることができません

- (BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    NSString *input = [textField.text stringByAppendingString:string]; 
    [textField setText:[self numberFormattedString:input]]; 
    return NO; 
} 
- (NSString *) numberFormattedString:(NSString *)str { 
    str = [str stringByReplacingOccurrencesOfString:@"£" withString:@""]; 
    NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init] autorelease]; 
    [formatter setNumberStyle:NSNumberFormatterCurrencyStyle]; 
    NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en-UK"]; 
    [formatter setLocale:locale]; 
    [locale release]; 
    [formatter setMaximumFractionDigits:3]; 
    [formatter setMinimumFractionDigits:0]; 
    return [formatter stringFromNumber:[NSNumber numberWithFloat:[str floatValue]]]; 
} 

Edit--

私はすでにUITextFieldの内側に4桁の数字を持つ、5桁目を入力すると、テキストフィールドのテキストはバックだけで入力された5桁目にリセットされます。

例えば

私はUITextFieldのに1000年に入り、私はその後、5通り5の更なる数字を入力すると、5桁目で、UITextFieldのテキストだけでは5桁目にリセットされます。 UITextFieldに '5'が表示されます。

TIA。

XcodeDev

+0

入力番号、予想される出力、実際の出力の具体例を挙げることができますか? NSNumberFormatterが通貨スタイルに設定されているため、私はあなたが何を期待しているかを正確に理解していません。 – UIAdam

+0

最新情報をチェックしてください! –

答えて

1

問題はカンマが[NSStringのに従ってFloatValue]を破壊していることです。 5番目の数字を入力すると、strはのようになり、floatValueはカンマの処理方法や実際の値があるという事実を知らないため、値1に変換されますそれの後の多くの桁。このコードnumberFormattedStringの第一または第二のラインなど

str = [str stringByReplacingOccurrencesOfString:@"," withString:@""];

を追加し、それが動作します。

0

おそらく何が起こっているが、ユーザーの種類として、フォーマッタが千マークでカンマを挿入していることです。シャープ記号のように再フォーマットするときに、それらを取り除いているわけではないので、ある時点でフォーマット機能に「1,000」のような文字列が与えられています。

浮動小数点値を取得して再フォーマットするためにNSNumberに変換しようとすると、浮動小数点値はコンマを解析できないため1を返します。

ソリューション:書式設定関数にこの余分な行を追加します。

str = [str stringByReplacingOccurrencesOfString:@"," withString:@""]; 
関連する問題