2013-03-15 41 views
10

Fammi sapere come arrotondare i decimali per 2 posizioni decimali in Objective-C.Come arrotondare i decimali per 2 posizioni decimali in Objective-C

Mi piacerebbe fare così. (tutti i numeri seguente frase è il valore float)

• rotonda

10,118 => 10,12

10,114 => 10.11

• Ceil

10,118 => 10,12

• piano

10.114 => 10,11

Grazie per aver controllato la mia domanda.

+3

Si fa nello stesso modo in cui lo fai in C :) – dasblinkenlight

+0

Hai bisogno di valori risultanti per essere stringhe o rimanere float? – coverback

+0

http://stackoverflow.com/questions/10749483/how-to-convert-a-float-value-to-rounded-off-in-iphone-app/10749620#10749620 –

risposta

28

Se è effettivamente necessario il numero da arrotondare, e non solo quando lo ha presentato:

float roundToN(float num, int decimals) 
{ 
    int tenpow = 1; 
    for (; decimals; tenpow *= 10, decimals--); 
    return round(tenpow * num)/tenpow; 
} 

o sempre a due cifre decimali:

float roundToTwo(float num) 
{ 
    return round(100 * num)/100; 
} 
+0

Um, questo non funziona per me. Mi dà un galleggiante con sei cifre decimali. –

+2

@TheJuicedWord: lo specificatore di conversione NSLog/printf corretto deve ancora essere '% .2f', ovviamente. –

+1

@ user529758 ma che ancora non risolve il fatto che l'effettivo 'float' è _not_ correttamente arrotondato. –

0
float roundedFloat = (int)(sourceFloat * 100 + 0.5)/100.0; 
+0

Questo non è corretto per i numeri negativi. C'è una funzione 'round()' nella libreria standard C. –

+0

Vero, ma: 1. c'erano solo numeri positivi nell'esempio, 2.il mio obiettivo era solo quello di mostrare l'idea;) – Gobra

+1

Vedo il tuo punto, ma questa non è * l'idea. * Scusa. –

9

è possibile utilizzare il seguito codice per formattarlo con due cifre decimali

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
formatter.numberStyle = NSNumberFormatterDecimalStyle; 
formatter.setMaximumFractionDigits = 2; 
formatter.setRoundingMode = NSNumberFormatterRoundUp; 

NSString *numberString = [formatter stringFromNumber:@(10.358)]; 
NSLog(@"Result %@",numberString); // Result 10.36 
+0

Penso che OP voglia * effettivamente * arrotondare il numero. –

+0

come da condizione data dal @Takuya (10,118 => 10,12 10.114 => 10.11 • Ceil 10,118 => 10,12 • piano 10.114 => 10.11) Penso che questo dovrebbe lavorare per lui. – Suhaiyl

+0

Voglio dire, non vuole * stampare * un valore arrotondato ma * avere * un valore arrotondato. –

Problemi correlati