2012-03-23 5 views
6

Mi piacerebbe farlo in modo che uno dei miei UILabels mostri solo un massimo di 3 cifre. Quindi, se il valore associato è 3.224789, mi piacerebbe vedere 3.22. Se il valore è 12.563, mi piacerebbe vedere 12.5 e se il valore è 298.38912 allora mi piacerebbe vedere 298. Ho cercato di utilizzare NSNumberFormatter per realizzare questo, ma quando ho impostato le cifre massime significative a 3 ha sempre 3 cifre dopo la cifra decimale. Ecco il codice:NSNumberFormatter per mostrare un massimo di 3 cifre

NSNumberFormatter *distanceFormatter = [[[NSNumberFormatter alloc] init] autorelease]; 
[distanceFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
[distanceFormatter setAlwaysShowsDecimalSeparator:NO]; 
[distanceFormatter setMaximumSignificantDigits:3]; 

ho sempre pensato 'cifre significative' intendevo tutte le cifre, prima e dopo la virgola. Ad ogni modo, c'è un modo per farlo usando NSNumberFormatter?

Grazie!

risposta

10

Credo che

farà esattamente quello che vuoi, cioè mostrerà sempre esattamente 3 cifre, sia 2 prima del decimale e 1 dopo o 1 prima del decimale e 2 dopo.

+1

Sì, questo funziona benissimo. L'impostazione del flag 'usesSignificantDigits' su YES è la chiave per questa soluzione per l'OP. Ho appena usato questo, e in effetti funziona attraverso il punto decimale, ad esempio converte $ 19,17 a $ 19,20. –

+0

si prega di controllare la mia domanda http://stackoverflow.com/questions/35112206/how-to-show-only-first-two-numbers-in-numberformatter. Non funziona per me in Swift – Alexander

2

Heres una piccola funzione che ho scritto:

int nDigits(double n) 
{ 
    n = fabs(n); 
    int nDigits = 0; 
    while (n > 1) { 
     n /= 10; 
     nDigits++; 
    } 

    return nDigits; 
} 

NSString *formatNumber(NSNumber *number, int sigFigures) 
{ 
    double num = [number doubleValue]; 
    int numDigits = nDigits(num); 

    NSString *format = [NSString stringWithFormat:@"%%%i.%ilf", sigFigures -= numDigits, sigFigures]; 

    return [NSString stringWithFormat:format, num]; 
} 

Nel mio test, questa ha funzionato bene.

+0

Grazie per la comprensione della domanda. C'è una differenza tra "cifre significative" e "numero di cifre a destra del punto decimale". –

4

Forse si hanno anche per impostare (non sono sicuro però):

[distanceFormatter setUsesSignificantDigits: YES];

Ma nel tuo caso è probabilmente molto più facile usare solo la formattazione stringa standard:

CGFloat yourNumber = ...; 
NSString* stringValue = [NSString stringWithFormat: @"%.3f", yourNumber]; 

(nota : questo arrotonderà l'ultima cifra)