¿Usando printf para redondear 49,765 a 49,77?

¿Usando printf para redondear 49,765 a 49,77?

49.765 es mi resultado de un anillo de comandos. Quiero usar print f para redondearlo en dos cifras decimales a 49,77.

¿Cuál es el código para ello?

Respuesta1

$ x=49.765
$ printf "%.2f" $(echo "$x + 0.005" | bc)

Debe usar comandos externos porque no hay una función de redondeo incorporada printf(1)y el shell POSIX no tiene aritmética de punto flotante incorporada.

Para redondear al dígito decimal más cercano, suma 0,5 y trunca. Para redondear a la décima más cercana, se divide el "factor de empuje" por 10, y así sucesivamente.

Esta falta de funciones integradas es lo que a menudo empuja a la gente a utilizar algo como Perl en lugar de Shell:

$ perl -e 'printf "%.2f", 49.765 + 0.005'

Lo mismo, pero todo manejado por un solo proceso.

Respuesta2

Puede utilizar el siguiente comando para redondear.

número flotante = 49,765; printf("%0.2f", número);

Debería poder obtener las 2 cifras después del punto decimal.

Pero esto simplemente se imprimirá, no actualizará el valor. Si desea cambiar el valor de la variable, debe utilizarlo a continuación.

#include <math.h>

float val = 49.765;

float rounded_down = floorf(val * 100) / 100;   /* Result: 49.76 */
float nearest = roundf(val * 100) / 100;  /* Result: 49.77 */
float rounded_up = ceilf(val * 100) / 100;      /* Result: 49.77 */

Tenga en cuenta que existen tres reglas de redondeo diferentes que quizás desee elegir: redondear hacia abajo (es decir, truncar después de dos decimales), redondear al más cercano y redondear hacia arriba. Por lo general, desea redondear al más cercano.

Como varios otros han señalado, debido a las peculiaridades de la representación de punto flotante, estos valores redondeados pueden no ser exactamente los valores decimales "obvios", pero serán muy, muy parecidos.

Respuesta3

Capture la salida del "anillo de comandos" en una variable y utilice printf.

$ x=49.765

$ printf '%.2f\n' "$x"
49.76

El redondeo se realiza sobre la representación binaria del número con la regla de redondeo a empates más cercanos a pares. Comprenda que la representación binaria no es exactamente igual al número dado en la mayoría de los casos.

información relacionada