iphone NSString stringWithFormat和float

时间:2012-02-03 07:39:22

标签: iphone nsstring floating-point stringwithformat

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

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

但是这给了我一个点后的许多不必要的数字(例如2.25它给出了2.249999)。

我只需要过滤输入,这样它就是合法的浮点数(数字并且不超过一个点)。

我该怎么做?

3 个答案:

答案 0 :(得分: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];

答案 1 :(得分: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);

答案 2 :(得分:-1)

尝试使用double而不是float。我认为双重删除所有尾随零。