El lenguaje de programación C provee métodos para redondear números.
Vamos a estudiarlos a los 3 y veremos cómo redondear según el número, redondear hacia abajo y redondear hacia arriba.
Las funciones que permiten eso vienen en la librería math.h.
Recuerda que esto mismo hicimos con JavaScript hace algún tiempo.
La librería la incluimos con #include<math.h>
. Como lo dije, veremos 3 métodos:
Redondear según el número: por ejemplo, si el número después del punto es 5, se redondea hacia abajo. En caso de que no, se redondea hacia arriba.
Por poner un ejemplo, 0.5 (y los mayores a él, siempre y cuando sean menor que 1) se redondea a 1 y 0.4999 (así como los menores a él) se redondea a 0.
Redondear hacia abajo: no importa la parte fraccionaria, siempre se redondeará hacia abajo.
Por poner un ejemplo, tanto 0.9, 0.5 y 0.1 se redondean a 0.
Finalmente, redondear hacia arriba: es como la anterior, pero ahora todos los números se redondean al siguiente entero próximo. 0.1, 0.5 y 0.9 se redondean a 1.
Eso fue por poner ejemplos, pero no sólo funcionan con números menor que 1, funcionan con cualquiera de ellos.
Veamos el primer método en donde depende de la parte fraccionaria el redondeo del número. Para esto, C proporciona el método round
; que recibe un número y lo devuelve redondeado. Algunos ejemplos:
0.5 redondeado con round es: 1.00
50.48 redondeado con round es: 50.00
20.24 redondeado con round es: 20.00
9.7 redondeado con round es: 10.00
10.5 redondeado con round es: 11.00
Aquí un programa que imprime eso:
/*
Redondear números en C con round
@author parzibyte
parzibyte.me/blog
*/#include<stdio.h>
#include<math.h>
int main(){
printf("0.5 redondeado con round es: %0.2f\n", round(0.5));
printf("50.48 redondeado con round es: %0.2f\n", round(50.48));
printf("20.24 redondeado con round es: %0.2f\n", round(20.24));
printf("9.7 redondeado con round es: %0.2f\n", round(9.7));
printf("10.5 redondeado con round es: %0.2f\n", round(10.5));
}
Ya vimos arriba que round
se usa para redondear según el número, pero si queremos que siempre se redondee hacia abajo usamos floor
. Veamos este ejemplo:
/*
Redondear números hacia abajo en C con floor
@author parzibyte
parzibyte.me/blog
*/#include<stdio.h>
#include<math.h>
int main(){
printf("0.5 redondeado con floor es: %0.2f\n", floor(0.5));
printf("50.99 redondeado con floor es: %0.2f\n", floor(50.99));
printf("20.24 redondeado con floor es: %0.2f\n", floor(20.24));
printf("0.1 redondeado con floor es: %0.2f\n", floor(0.1));
printf("10.5 redondeado con floor es: %0.2f\n", floor(10.5));
}
La salida es:
0.5 redondeado con floor es: 0.00
50.99 redondeado con floor es: 50.00
20.24 redondeado con floor es: 20.00
0.1 redondeado con floor es: 0.00
10.5 redondeado con floor es: 10.00
ceil
funciona para hacer lo contrario a floor
; esto es redondear hacia arriba un número.
Aquí el código que es muy parecido al de floor
:
/*
Redondear números hacia arriba en C con ceil
@author parzibyte
parzibyte.me/blog
*/#include<stdio.h>
#include<math.h>
int main(){
printf("0.5 redondeado con ceil es: %0.2f\n", ceil(0.5));
printf("50.99 redondeado con ceil es: %0.2f\n", ceil(50.99));
printf("20.24 redondeado con ceil es: %0.2f\n", ceil(20.24));
printf("0.1 redondeado con ceil es: %0.2f\n", ceil(0.1));
printf("10.5 redondeado con ceil es: %0.2f\n", ceil(10.5));
}
Cuando ejecutamos este programa, se imprime lo siguiente:
0.5 redondeado con ceil es: 1.00
50.99 redondeado con ceil es: 51.00
20.24 redondeado con ceil es: 21.00
0.1 redondeado con ceil es: 1.00
10.5 redondeado con ceil es: 11.00
Todo depende de nuestras necesidades.
Escribí esta entrada para explicar la función floor
que usaré en un post de búsqueda binaria en C que estoy preparando; ahí necesito siempre redondear hacia abajo y esta función viene de maravilla.
Recordemos que en este caso únicamente estamos imprimiendo. Pero como en todo lenguaje, podemos asignar el resultado a una variable.
Por ejemplo, veamos este fragmento de código:
/*
Redondear números con los 3 métodos en C
@author parzibyte
parzibyte.me/blog
*/#include<stdio.h>
#include<math.h>
int main(){
float numero = 28.11;
float redondeado = round(numero);
float redondeadoHaciaAbajo = floor(numero);
float redondeadoHaciaArriba = ceil(numero);
printf("%0.2f con round es %0.2f, con floor %0.2f y con ceil %0.2f", numero, redondeado, redondeadoHaciaAbajo, redondeadoHaciaArriba);
}
Y no sólo eso, también podemos trabajar con el tipo de dato double o long double para mayor precisión.
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…
En este artículo te voy a enseñar cómo usar un "top level await" esperando a…
Ayer estaba editando unos archivos que son servidos con el servidor Apache y al visitarlos…
Esta web usa cookies.
Ver comentarios
Que buen post, estoy estudiando informatica y necesitaba saber aproximar en C, me salvaste!
Me da gusto que te haya ayudado :)
Saludos