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
- L'animazione nella vista OpenGL ES si blocca quando UIScrollView viene trascinato su iPhone
- Posso modificare i pixel della proprietà CGImage di UIImage
- Aggiunta di una vista su StatusBar in iPhone
- Calcolare il frame UIBarButtonItem nella finestra?
- Come eliminare 2 controller di visualizzazione modale in successione?
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];