4

入力がUIKeyboardTypeDecimalPadあり、ユーザーがフロートを入力する必要があります(ドットの後に無制限の文字を使用)。入力の後、文字列を次のようにフィルタリングします。

NSString *newValue = [NSString stringWithFormat:@"%.f",[textField.text floatValue]]

しかし、これにより、ドットの後に多くの不要な数字が表示されます (たとえば、2.25 の場合は 2.249999 になります)。

必要なのは、入力をフィルタリングして、有効な浮動小数点数 (数字で 1 つ以下のドット) にすることだけです。

それ、どうやったら出来るの?

4

3 に答える 3

11
NSString *newValue = [NSString stringWithFormat:@"%0.1f", [textField.text floatValue]];

ドットの後の数字は、必要な小数点以下の桁数です。

更新: 文字列操作を使用して、ユーザーが入力した小数点以下の桁数を特定できます (エッジ ケースを確認することを忘れないでください)。

NSInteger numberOfDecimalPlaces = textString.length - [textString rangeOfString:@"."].location - 1;

そして、同じレベルの表示精度で新しいフロートを使用して新しい文字列を作成する場合は、次を使用できます。

NSString *stringFormat = [NSString stringWithFormat:@"%%0.%if", numberOfDecimalPlaces];
NSString *newString = [NSString stringWithFormat:stringFormat, newFloat];
于 2012-02-03T07:52:04.967 に答える
1

これがあなたが望むものかどうかはわかりませんが、次のようなことを試してください:

NSNumberFormatter *nf = [[NSNumberFormatter alloc] init];
// set to long number of decimals to accommodate whatever a user might enter
[nf setMaximumFractionDigits:20]; 
NSString *s = [nf stringFromNumber:
               [NSNumber numberWithDouble:[userEnteredNumberString doubleValue]]
               ];
NSLog(@"final:%@",s);
于 2012-02-05T16:13:47.383 に答える
-1

float の代わりに double を使用してみてください。double は末尾のゼロをすべて削除すると思います。

于 2012-02-03T08:19:31.990 に答える