Определите, где первый ноль в поплавком номере

71
11

В моем приложении у меня есть несколько случайных чисел с плавающей запятой. Я должен определить, где начинается нулевой период, чтобы сократить число и отобразить его в UILabel.


Итак, например, если у меня есть номер 3.05, он отображается как 3.0500000, пока я хочу, чтобы он отображался правильно "3.05".

спросил(а) 2011-02-23T21:07:00+03:00 9 лет, 7 месяцев назад
1
Решение
80

Самый простой способ - использовать ограничение длины, например @ "%. 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.

ответил(а) 2011-02-23T21:24:00+03:00 9 лет, 7 месяцев назад
69

Используйте спецификаторы формата:


// 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)];

ответил(а) 2011-02-23T21:12:00+03:00 9 лет, 7 месяцев назад
40

Проблема с вашим вопросом: в этом плавании не повторяются нули. В частности, представление с плавающей запятой 3.05 фактически не равно 3.05 - оно больше похоже на 3.04999999999999982236431605997495353221893310546875. Лучше всего, если это важно, было бы использовать что-то вроде NSDecimalNumber и его методы преобразования строк. Он может точно представлять номера базы-10, в отличие от двоичной с плавающей запятой.

ответил(а) 2011-02-23T21:30:00+03:00 9 лет, 7 месяцев назад
40

Вы пробовали:


NSString* myNumber = [NSString stringWithFormat:@"%.02f", number];

с двумя цифрами:


@"%.02f" = 3.05

с 3-мя цифрами:


@"%.03f" = 3.050

ответил(а) 2011-02-23T21:17:00+03:00 9 лет, 7 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема