Come posso arrotondare un valore float a 2 posizioni post decimali?

Ho un valore float da un accelerometro che assomiglia a questo:

-3,04299553323

Mi piacerebbe avere -3.04 per esempio. C’è un modo semplice per arrotondare il valore float?

Modificare:

Arrotondare i numeri in Objective-C

So che questo è vecchio post, ma nel caso in cui qualcun altro è alla ricerca di una rapida opzione in due passaggi.

float old = -3.04299553323; float new = [[NSString stringWithFormat:@"%.2f",old]floatValue]; 

Risultato = -3.04

Il @ “%. 2f” verrà arrotondato a due cifre decimali. Se vuoi tre cifre decimali, metti @ “%. 3f” e così via.

Spero che questo ti aiuti!

Dovresti farlo sempre durante la formattazione di un numero per la visualizzazione all’utente finale, perché non è garantito

 float rounded = roundf(orig * 100) / 100.0; 

o simili restituiranno una risposta esatta.

In effetti, in generale, non lo farà. Ad esempio, considera

 float f = 123456.3; float r = roundf(f * 100) / 100.0; printf("%.2f, %.10f\n", r, r); 

quali uscite

 123456.30, 123456.2968750000 

Oops!

Usare il double anziché il float aiuta, ma anche così, se cambiamo il codice un po ‘, puoi vedere che in realtà non risolve il problema:

 double f = 123456.3; double r = round(f * 100) / 100.0; printf("%.2f, %.20f\n", r, r); 

Ancora una volta, otteniamo

 123456.30, 123456.30000000000291038305 

che mostra abbastanza chiaramente che non è esattamente arrotondato.

In ogni caso, la morale della storia è che facendo cose come round(f * 100) / 100.0 solo giri approssimativamente . In alcuni casi potrebbe essere abbastanza buono, ma è necessario tenere presente che il risultato non è davvero arrotondato.

Se vuoi qualcosa di meglio, dovrai invece usare l’aritmetica decimale. Puoi farlo tenendo i tuoi valori come numeri interi (ad esempio per i valori di valuta, tenerli in penny o centesimi invece di sterline o dollari) o usando uno dei vari pacchetti decimali in virgola mobile che puoi trovare sulla pagina virgola mobile decimale di Wikipedia .

Moltiplicalo per 100, (arrotondando su / giù all’intero più vicino se necessario), prendi la parte intera, quindi dividi per 100 di nuovo

Si applica per qualsiasi numero di decimali posti, moltiplicare / dividere per 10 ^ (numero di decimali).

Ho appena postato la mia risposta a questa domanda perché è stato l’unico modo per far sì che questo funzionasse rapidamente quando ho unito due delle risposte date per mostrare all’utente un valore float arrotondato in un’app per iPad:

 NSString *roundedAmount = [NSString stringWithFormat:@"%.2f", round ((floatValue / 1024) * 100.0) / 100.0];