2012-01-23 14 views
14

Czy wiesz, w jaki sposób mogę przekonwertować wartość float na wartość nsstring, ponieważ przy moim kodzie wystąpił błąd.Konwertuj wartość pływającą na NSString

mój kod:

- (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]; 
//.... 
} 

Błąd:

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

Dziękuję za pomoc.

Odpowiedz

44

Trzeba użyć %f formatu specyfikatora dla pływaka, nie %@.

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

użyć specyficznych liczbę cyfr dziesiętnych %.nf po użyciu, w którym n oznacza liczbę miejsc po przecinku.

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

Obj-C używa formatowania stylu C printf. Proszę sprawdzić printf man page dla wszystkich innych możliwych formatów.

1

@"%f" brzmi jak bardziej odpowiedni ciąg formatu dla float.

+1

+1 Nie tylko "brzmi jak" bardziej odpowiednim formacie - to jest * zdecydowanie * najbardziej odpowiedni format dla 'float' :) – dasblinkenlight

+0

To właśnie miałem na myśli, mówiąc delikatnie mówiąc ;-) –

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

jeszcze jedna opcja:

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

Nowoczesny (i mniej gadatliwy) podejście byłoby:

NSString *str = @(myFloat).description; 
Powiązane problemy