Определите, где первый ноль в поплавком номере
В моем приложении у меня есть несколько случайных чисел с плавающей запятой. Я должен определить, где начинается нулевой период, чтобы сократить число и отобразить его в UILabel.
Итак, например, если у меня есть номер 3.05, он отображается как 3.0500000, пока я хочу, чтобы он отображался правильно "3.05".
Самый простой способ - использовать ограничение длины, например @ "%. 2f". Но я думаю, что если вы хотите обрезать нули, вы должны использовать это:
NSString* string = [[NSString stringWithFormat: @"%f", 3.05000000] stringByTrimmingCharactersInSet: [NSCharacterSet characterSetWithCharactersInString: @"0"]];
Вернется 3.05
NSString* string = [[NSString stringWithFormat: @"%f", 3.0500100000] stringByTrimmingCharactersInSet: [NSCharacterSet characterSetWithCharactersInString: @"0"]];
Вернется 3.05001, а @ "%. 2f" вернется 3.05
Вы должны заметить ошибки округления, поэтому для номера 3.0500000010000 будет возвращена строка 3.05.
Используйте спецификаторы формата:
// Print max two numbers after the decimal point
NSString *string = [NSString stringWithFormat:@"%.2f", number];
Если вам нужно выработать позицию первого 0, выведите его в строку и затем выполните поиск этой строки для первого '0'
// Render the complete string
NSString *completeNumber = [NSString stringWithFormat:@"%f", number];
// Get the first 0
NSRange range = [completeNumber rangeOfString:@"0"];
// Trim the string
NSString myString = [completeNumber substringWithRange:NSMakeRange(0, range.location)];
Проблема с вашим вопросом: в этом плавании не повторяются нули. В частности, представление с плавающей запятой 3.05 фактически не равно 3.05 - оно больше похоже на 3.04999999999999982236431605997495353221893310546875. Лучше всего, если это важно, было бы использовать что-то вроде NSDecimalNumber и его методы преобразования строк. Он может точно представлять номера базы-10, в отличие от двоичной с плавающей запятой.
Вы пробовали:
NSString* myNumber = [NSString stringWithFormat:@"%.02f", number];
с двумя цифрами:
@"%.02f" = 3.05
с 3-мя цифрами:
@"%.03f" = 3.050