4

我有一个输入,UIKeyboardTypeDecimalPad我需要我的用户输入一个浮点数(点​​后有无限个字符)。输入后,我使用以下内容过滤字符串:

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

但这给了我很多点后不必要的数字(例如,对于 2.25,它给出了 2.249999)。

我只需要过滤输入,使其成为合法的浮点数(数字且不超过一个点)。

我怎么做?

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

尝试使用双精度而不是浮点数。我认为双重删除所有尾随零。

于 2012-02-03T08:19:31.990 回答