Форматирование плавающих объектов в Objective C - PullRequest
32 голосов
/ 13 января 2010

Мне нужно отформатировать число с плавающей запятой (броский заголовок, он?) С точностью до 2 десятичных знаков, но только если эти десятичные разряды имеют значения, которые не равны нулю. Пример:

У меня есть NSTextField с именем 'answer', после того, как я сделаю некоторую математику с парой чисел, я хочу назначить свою переменную 'answerFloat' для 'answer' NSTextField. Пока у меня есть:

[answer setStringValue:[NSString stringWithFormat:@"%.2f", answerFloat]];

Но это устанавливает что-то вроде 45 на 45,00. Я хочу, чтобы целые числа отображались без нулей, а любые десятичные числа отображались с соответствующими им десятичными значениями.

Нужно ли выполнять какую-то проверку перед передачей в stringWithFormat? Или NSString предлагает способ справиться с этим?

Ответы [ 4 ]

44 голосов
/ 13 января 2010

Вы пробовали спецификатор формата %g?

NSLog([NSString stringWithFormat:@"%g, %g", 45.0, 45.5]);

2010-01-12 19: 54: 38.651 foo [89884: 10b] 45, 45,5

23 голосов
/ 16 февраля 2012

Проблема с% g заключается в том, что у него нет способа указать приращение округления (по крайней мере, я не могу его найти).

Вы можете использовать NSNumberFormatter, как этот, чтобы достичь своего результата с числом с неопределенным числом десятичных разрядов.

double none = 5;
double one = 5.1;
double two = 5.01;
double lots = 5.918286558251858392107584219;

NSNumber *numberNone = [NSNumber numberWithDouble:none];
NSNumber *numberOne = [NSNumber numberWithDouble:one];
NSNumber *numberTwo = [NSNumber numberWithDouble:two];
NSNumber *numberLots = [NSNumber numberWithDouble:lots];

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.roundingIncrement = [NSNumber numberWithDouble:0.01];
formatter.numberStyle = NSNumberFormatterDecimalStyle;

NSLog(@"%@",[formatter stringFromNumber:numberNone]);
NSLog(@"%@",[formatter stringFromNumber:numberOne]);
NSLog(@"%@",[formatter stringFromNumber:numberTwo]);
NSLog(@"%@",[formatter stringFromNumber:numberLots]);

Выход:

* +1007 *
3 голосов
/ 13 января 2010

Поиск NSNumberFormatter.

2 голосов
/ 13 января 2010

Для максимальной гибкости вы можете рассмотреть возможность реализации пользовательского подкласса NSFormatter . В руководстве по программированию форматирования данных для какао .

могут быть и другие важные советы.
...