2012-01-23 3 views
14

Вы знаете, как я могу преобразовать значение float в значение nsstring, потому что с моим кодом возникает ошибка.Преобразование значения float в NSString

Мой код:

- (float)percent:(float)a :(float)b{ 
    return a/b * 100; 
} 

- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects { 
    // .... 

    float tx_nb_demande_portabilite = [self percent: [(NSNumber*) [stat nb_demande_portabilite] floatValue] :[(NSNumber*) [stat nb_users] floatValue]]; 
    NSString *tx_nb_demande_portabilite_st = [NSString stringWithFormat:@"%@", tx_nb_demande_portabilite]; 
//.... 
} 

Ошибка:

EXC_BAD ACCESS for NSString *tx_nb_demande_portabilite_st = [NSString stringWithFormat:@"%@", tx_nb_demande_portabilite]; 

Спасибо за вашу помощь.

ответ

44

Вы должны использовать %f спецификатор формата для поплавка, не %@.

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

Чтобы использовать определенное количество цифр после десятичного использования %.nf где п число знаков после запятой.

// 3 digits after decimal point 
NSString *str = [NSString stringWithFormat:@"%.3f", myFloat]; 

Obj-C использует C printf стиль форматирования. Пожалуйста, проверьте printf man page на все возможные варианты форматирования.

1

@"%f" звучит как более подходящая строка формата для float.

+1

+1 Это не только "звучит как" более подходящий формат - это * является безусловно, самый подходящий формат для 'float' :) – dasblinkenlight

+0

Вот что я имел в виду, просто мягко говоря ;-) –

1
[NSString stringWithFormat:@"%f", tx_nb_demande_portabilite]; 
4

еще один вариант:

NSString * str = [NSNumber numberWithFloat:value].stringValue; 
0

Современный (и менее многословным) подход был бы:

NSString *str = @(myFloat).description; 
Смежные вопросы