我有UIKeyboardTypeDecimalPad
的输入,我需要我的用户输入一个浮点数(点后有无限字符)。输入后我用以下字符过滤字符串:
NSString *newValue = [NSString stringWithFormat:@"%.f",[textField.text floatValue]]
但是这给了我一个点后的许多不必要的数字(例如2.25它给出了2.249999)。
我只需要过滤输入,这样它就是合法的浮点数(数字并且不超过一个点)。
我该怎么做?
答案 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。我认为双重删除所有尾随零。