¿Cómo puedo redondear un valor flotante a 2 posiciones decimales?

Tengo un valor flotante de un acelerómetro que se ve así:

-3.04299553323

Me gustaría obtener -3.04, por ejemplo. ¿Hay una manera fácil de redondear ese valor flotante?

Editar:

Redondeo de números en Objective-C

Sé que esta es una publicación anterior, pero solo en caso de que alguien más esté buscando una opción rápida de Dos pasos.

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

Resultado = -3.04

El @ “%. 2f” redondeará a dos lugares decimales. Si desea tres lugares decimales, ponga @ “%. 3f” y así sucesivamente.

¡Espero que esto ayude!

Solo debe hacer esto al formatear un número para mostrar al usuario final, porque no hay garantía de que

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

o similar devolverá una respuesta exacta.

De hecho, en general, no lo hará. Por ejemplo, considere

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

que salidas

 123456.30, 123456.2968750000 

Oops!

Usar ayudas double lugar de float , pero aun así, si cambiamos el código un poco, puede ver que realmente no resuelve el problema:

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

Nuevamente, obtenemos

 123456.30, 123456.30000000000291038305 

lo que muestra bastante claramente que no está exactamente redondeado.

De todos modos, la moraleja de la historia es que hacer cosas como round(f * 100) / 100.0 solo redondea aproximadamente . Puede ser lo suficientemente bueno en algunos casos, pero debe tener en cuenta que el resultado no es realmente redondeado.

Si quieres algo mejor, necesitarás usar aritmética decimal en su lugar. Puede hacer esto manteniendo sus valores como enteros (por ejemplo, para valores de moneda, manténgalos en peniques o centavos en lugar de libras o dólares), o usando uno de los diversos paquetes de coma flotante decimal que puede encontrar en la página Decimal Floating Point de Wikipedia .

Multiplíquelo por 100, (redondee hacia arriba / abajo al entero más cercano si es necesario), tome la parte entera, luego divida por 100 nuevamente

Se aplica a cualquier número de decimales, multiplique / divida por 10 ^ (número de decimales).

Acabo de publicar mi respuesta a esta pregunta porque era la única forma de hacerlo funcionar rápidamente, ya que fusioné dos de las respuestas dadas para mostrar un valor flotante redondeado al usuario en una aplicación para iPad:

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