2

NSNumberFormatterで無限桁ではなく4桁(つまり£2,222)しか使用できない理由を教えてください。

- (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]]];
}

編集 -

UITextField内にすでに4桁ある5桁目を入力すると、textFieldのテキストは単独で入力された5桁目にリセットされます。

例えば

UITextFieldに1000を入力し、さらに5の数字を入力します。5は5桁目であるため、UITextFieldのテキストは5桁目だけにリセットされます。UITextFieldに「5」が表示されます。

TIA。

XcodeDev

4

2 に答える 2

1

おそらく何が起こっているのかというと、ユーザーが入力すると、フォーマッターが千のマークにコンマを挿入しているということです。ポンド記号のように再フォーマットを行う場合、それらを取り除くことはないため、ある時点で、書式設定関数に「1,000」のような文字列が与えられます。

そのfloatValueを取得して、再フォーマットのためにNSNumberに変換し直そうとすると、floatValueはコンマを解析できないため、1を返します。

解決策:この余分な行をフォーマット関数に追加します。

str = [str stringByReplacingOccurrencesOfString:@"," withString:@""];
于 2012-01-14T03:27:15.827 に答える
1

問題は、コンマが[NSStringfloatValue]を壊していることです。5桁目を入力すると、strは1,0005のようになります。これは、カンマの処理方法や桁数が多すぎるという事実がわからないため、floatValueが1の値に変換します。その後。このコードを追加する

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

numberFormattedStringの1行目または2行目として機能します。

于 2012-01-14T03:31:08.990 に答える