«Динамическое» отображение поплавков? - PullRequest
3 голосов
/ 20 апреля 2011

Я пытаюсь написать приложение для iphone в ObjectiveC. Мне нужно отобразить текст статуса, который сообщает пользователю значение нескольких переменных. Эти значения можно изменить, перетаскивая маркер пальцем на диаграмме. У меня проблема в том, что диапазон значений довольно широк. Если вы хотите установить значения от 0 до 1, вы, вероятно, захотите 3 десятичных знака (например, 0,345). Но если диапазон от 0 до 10000, вам не нужны никакие десятичные дроби вообще.

Теперь у меня есть около 20 различных сообщений, которые можно отобразить, и если я хочу, чтобы все они отображали значения «динамически», будет много кода, подобного этому:

float start,stop;    // Defined earlier...
switch ( numberOfDecimals ) {
    case 0:
        lblStatus.text = [NSString stringWithFormat:@"Start: %.0f  Stop :%.0f", start, stop];  break;
    case 1:
        lblStatus.text = [NSString stringWithFormat:@"Start: %.1f  Stop :%.1f", start, stop];  break;
    case 2:
        lblStatus.text = [NSString stringWithFormat:@"Start: %.2f  Stop :%.2f", start, stop];  break; 
    default:  break;
} 

Нет ли лучшего способа сделать это?

Ответы [ 4 ]

1 голос
/ 20 апреля 2011

Используйте NSNumberFormatter. Вот для чего.

0 голосов
/ 30 сентября 2015

Simple.Заменить оператор switch на:

lblStatus.text = [NSString stringWithFormat:@"Start: %.*f  Stop :%.*f", numberOfDecimals, start, numberOfDecimals, stop];
0 голосов
/ 21 апреля 2011

На случай, если кому-то все равно, я пришёл к этому после ознакомления с документами по NSNumberFormatter:

float start,stop; 
NSNumberFormatter *formatter;

// Setup the formatter
formatter = [[NSNumberFormatter alloc] init]; 
[formatter setNumberStyle:NSNumberFormatterDecimalStyle ];
[formatter setMaximumFractionDigits: numberOfDecimals ];

lblStatus.text = [NSString stringWithFormat:@"Start: %@  Stop:%@", 
                  [formatter stringFromNumber: [NSNumber numberWithFloat: start]], 
                  [formatter stringFromNumber: [NSNumber numberWithFloat: stop ]]];  

Не уверен, что это самое элегантное или эффективное решение, но оно работает и выглядит лучше.

0 голосов
/ 20 апреля 2011

Создайте строку формата с помощью строки формата.

NSString* MyFormatString = [NSString stringWithFormat:@"Start :%%.%df Stop :%%.%df",
        numberOfDecimals,
        numberOfDecimals];
[NSString stringWithFormat:MyFormatString, start, stop];  break; 
...