Определите, где находится первый ноль в числе с плавающей точкой - PullRequest
0 голосов
/ 23 февраля 2011

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

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

Ответы [ 4 ]

3 голосов
/ 23 февраля 2011

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

2 голосов
/ 23 февраля 2011

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

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

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

0 голосов
/ 23 февраля 2011

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

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

с 2 цифрами:

@"%.02f" = 3.05

с 3 цифрами:

@"%.03f" = 3.050
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...