iphone NSString stringWithFormat и float - PullRequest
4 голосов
/ 03 февраля 2012

У меня есть ввод с UIKeyboardTypeDecimalPad, и мне нужен мой пользователь для ввода числа с плавающей запятой (с неограниченным количеством символов после точки). После ввода я фильтрую строку с:

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

Но это дает мне много ненужных цифр после точки (например, для 2.25 - 2.249999).

Все, что мне нужно, это отфильтровать входные данные, чтобы они были разрешены как плавающие (цифры и не более одной точки).

Как мне это сделать?

Ответы [ 3 ]

11 голосов
/ 03 февраля 2012
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 голос
/ 05 февраля 2012

Не уверен, что вы этого хотите, но попробуйте что-то вроде следующего:

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);
0 голосов
/ 03 февраля 2012

Попробуйте использовать double вместо float.Я думаю, что двойной удаляет все концевые нули.

...