2013-07-23 3 views
0

В моем текущем приложении у меня есть уравнение, которое обычно решает довольно длинное количество десятичных чисел, то есть: 0.12345 или .123. Но способ, которым я должен это работать, - это показать только 1 или 2 десятичных числа, чтобы, по существу, произвести 0.12 или 0.1 на основе значений, о которых я упоминал.Как получить CGFloat из NSString?

Для того, чтобы сделать это, я сделал следующее: Взятые мой CGFloat к NSString:

CGFloat eX1 = 0.12345 
NSLog(@" eX1 = %f", eX1); //This of course , prints out 0.12345 

NSNumberFormatter *XFormatter = [[NSNumberFormatter alloc] init]; 
Xformatter.numberStyle=NSNumberFormatterDecimalStyle; 
Xformatter.maximumFractionDigits=1; 


NSString *eX1F = [formatter stringFromNumber:@(eX1)]; 
NSLog (@"eX1F = %@",eX1F); //This prints out 0.1 

Но моя проблема в том, что мне нужно продолжать работать с этим как CGFloat после того, как был отформатирован , Я попытался взять строку обратно на число, выполнив: numberFromString, но проблема в том, что работает только с NSNumber.

Что я могу сделать, чтобы отформатировать CGFloat и продолжать работать с ним как CGFloat и не в NSString или NSNumber?

Update Я пробовал:

float backToFloat = [myNumber floatValue]; 

но результат номер неотформатированная: 0.10000 Мне нужны эти дополнительные 0s из

+4

Значение поплавка/CGFloat не имеет «формат». Это чистое числовое значение, и любой «формат» накладывается на него любым отображением. –

ответ

14

Для преобразования NSString в CGFloat вы можете использовать floatValue:

CGFloat *eX1rounded = [eX1F floatValue]; 

Но вы можете округлить eX1 в eX1rounded непосредственно без использования номера форматировщик, , например:

CFGloat *eX1rounded = roundf(eX1F * 10.0f)/10.0f; 

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

+0

Я пробовал это, но в конечном итоге я все еще получаю дополнительные 0. См. Обновленный вопрос @MartinR – vzm

+0

@vzm: см. Комментарий Hot Licks: у float нет «формата». –

1

Использование stringWithFormat: округлить и преобразовать в строку для отображения:

NSString* str = [NSString stringWithFormat:@"%0.2f", eX1]; 

Вы можете сделать то же самое в NSLog, то % 0.2f говорит, что вы хотите, 2 знака после запятой.

NSLog(@" eX1 =%0.2f", eX1); // this prints "0.12" 
Смежные вопросы