我有一个输入,UIKeyboardTypeDecimalPad
我需要我的用户输入一个浮点数(点后有无限个字符)。输入后,我使用以下内容过滤字符串:
NSString *newValue = [NSString stringWithFormat:@"%.f",[textField.text floatValue]]
但这给了我很多点后不必要的数字(例如,对于 2.25,它给出了 2.249999)。
我只需要过滤输入,使其成为合法的浮点数(数字且不超过一个点)。
我怎么做?
我有一个输入,UIKeyboardTypeDecimalPad
我需要我的用户输入一个浮点数(点后有无限个字符)。输入后,我使用以下内容过滤字符串:
NSString *newValue = [NSString stringWithFormat:@"%.f",[textField.text floatValue]]
但这给了我很多点后不必要的数字(例如,对于 2.25,它给出了 2.249999)。
我只需要过滤输入,使其成为合法的浮点数(数字且不超过一个点)。
我怎么做?
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];
不确定这是否是您想要的,但请尝试以下操作:
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);
尝试使用双精度而不是浮点数。我认为双重删除所有尾随零。