05/06/2021
En el mundo de la programación y el desarrollo de videojuegos, como en GameMaker, a menudo trabajamos con diferentes tipos de números. Tenemos números enteros, que son valores completos sin decimales (como 1, 5, -10), y tenemos números flotantes, que sí pueden tener parte decimal (como 3.14, 0.5, -2.75). Aunque los números flotantes ofrecen gran precisión, hay muchas situaciones en las que necesitamos un número entero exacto. Por ejemplo, las coordenadas de los píxeles en una pantalla siempre son enteras, o quizás necesitas contar el número de vidas restantes, que no puede ser una fracción. Aquí es donde entran en juego las funciones de redondeo. GameMaker nos proporciona herramientas muy útiles para convertir números flotantes en enteros de diferentes maneras, dependiendo de la precisión o el comportamiento que necesitemos.
![[GameMaker Studio 2] - Different Ways To Round Your Numbers](https://i.ytimg.com/vi/MnpkqQOTzog/hqdefault.jpg)
Comprender cómo y cuándo usar estas funciones es fundamental para evitar errores inesperados en tu código y asegurar que tu lógica de juego funcione exactamente como lo deseas. No todas las situaciones de redondeo son iguales; a veces querrás redondear al número más cercano, otras veces siempre hacia abajo, y en ocasiones, siempre hacia arriba. Exploraremos las funciones clave que GameMaker ofrece para manejar estas tareas: round, floor y ceil.

La Función round() en GameMaker: El Redondeo Estándar
La función más común y quizás la primera en la que piensas cuando escuchas "redondear" es round(). En GameMaker, esta función hace exactamente lo que esperas en la mayoría de los casos: toma un número flotante y lo redondea al número entero más cercano.
El mecanismo detrás de round() es bastante sencillo y sigue la regla matemática convencional. Examina la parte decimal del número original. Si esta parte decimal es 0.5 o mayor, la función redondea el número hacia arriba al siguiente entero. Si la parte decimal es menor que 0.5, la función redondea el número hacia abajo al entero anterior.
Veamos un ejemplo práctico de cómo se utiliza round() en GameMaker:
var myNumber = 2.7; var roundedNumber = round(myNumber); // En este caso, roundedNumber contendrá el valor 3.¿Por qué 3? Porque la parte decimal de 2.7 es 0.7, que es mayor que 0.5. Siguiendo la regla, round() redondea 2.7 hacia arriba, resultando en 3.
Consideremos otro ejemplo:
var anotherNumber = 4.3; var anotherRoundedNumber = round(anotherNumber); // anotherRoundedNumber contendrá el valor 4.Aquí, la parte decimal de 4.3 es 0.3, que es menor que 0.5. Por lo tanto, round() redondea 4.3 hacia abajo, obteniendo 4.
¿Qué sucede exactamente con 0.5? La regla es que si la parte decimal es *igual* o mayor que 0.5, redondea hacia arriba. Por lo tanto:
var specialNumber = 5.5; var specialRoundedNumber = round(specialNumber); // specialRoundedNumber contendrá el valor 6.Este comportamiento es el más común y es útil en muchas situaciones donde simplemente quieres el entero más cercano a tu valor flotante original.
Más Allá de round(): floor() y ceil()
Si bien round() es muy útil, no cubre todas las necesidades de redondeo. A veces, necesitas asegurarte de que un número siempre se redondee hacia abajo, independientemente de su parte decimal, o que siempre se redondee hacia arriba. Para estos casos, GameMaker ofrece las funciones floor y ceil.
La Función floor(): Siempre Hacia Abajo
La función floor() (suelo, en inglés) es la contraparte de round() cuando necesitas garantizar que un número flotante se convierta en el entero más grande que sea menor o igual que el número original. En términos más sencillos, floor() siempre redondea hacia abajo, sin importar cuán grande sea la parte decimal (siempre y cuando no sea un entero exacto).
La sintaxis para usar floor() es simple:
floor(n);Donde n es el número Real (flotante) que deseas redondear hacia abajo.
El valor de retorno de floor() es un número Real, pero será un valor entero.
Veamos los ejemplos proporcionados y algunos adicionales para entenderlo mejor:
var myNumberDown = 2.7; var flooredNumber = floor(myNumberDown); // flooredNumber contendrá el valor 2.Aunque 2.7 está más cerca de 3, floor() ignora la regla del 0.5 y simplemente corta la parte decimal, resultando en 2.
Otro ejemplo, mencionado en la información:
var val = floor(3.9); // val se establecerá en 3.De nuevo, a pesar de que 3.9 está muy cerca de 4, floor() lo reduce a 3.

Incluso con una parte decimal muy alta:
var largeDecimal = 5.99999; var flooredLargeDecimal = floor(largeDecimal); // flooredLargeDecimal contendrá el valor 5.Como puedes ver, floor() es implacable: siempre va al entero inferior (o se queda en el mismo entero si el número original ya era entero).
La Función ceil(): Siempre Hacia Arriba
Por otro lado, si tu necesidad es siempre redondear un número flotante hacia arriba al siguiente entero, la función que buscas es ceil() (techo, en inglés). Esta función garantiza que obtendrás el entero más pequeño que sea mayor o igual que el número original.
La sintaxis de ceil() es idéntica a la de floor():
ceil(n);Donde n es el número Real (flotante) que deseas redondear hacia arriba.
El valor de retorno también es un número Real que representa un entero.
El ejemplo proporcionado nos muestra cómo funciona:
var myNumberUp = 2.3; var ceiledNumber = ceil(myNumberUp); // ceiledNumber contendrá el valor 3.Aquí, a pesar de que 2.3 está más cerca de 2, ceil() lo fuerza a redondear hacia arriba al 3.
Veamos otro ejemplo para contrastar con floor():
var smallDecimal = 4.1; var ceiledSmallDecimal = ceil(smallDecimal); // ceiledSmallDecimal contendrá el valor 5.Aunque 4.1 está muy cerca de 4, ceil() lo eleva a 5.
Si el número ya es un entero:
var integerNumber = 7.0; var ceiledInteger = ceil(integerNumber); // ceiledInteger contendrá el valor 7.Al igual que floor(), ceil() no cambia el valor si el número de entrada ya es un entero.
Comparando round, floor y ceil
Para entender claramente las diferencias y saber cuándo usar cada función, es útil verlas lado a lado con los mismos ejemplos.
Consideremos el número 2.7:
round(2.7)-> 3 (porque 0.7 >= 0.5, redondea arriba)floor(2.7)-> 2 (siempre redondea abajo)ceil(2.7)-> 3 (siempre redondea arriba)
Consideremos el número 2.3:
round(2.3)-> 2 (porque 0.3 < 0.5, redondea abajo)floor(2.3)-> 2 (siempre redondea abajo)ceil(2.3)-> 3 (siempre redondea arriba)
Consideremos el número 2.5:
round(2.5)-> 3 (porque 0.5 >= 0.5, redondea arriba)floor(2.5)-> 2 (siempre redondea abajo)ceil(2.5)-> 3 (siempre redondea arriba)
Aquí tienes una tabla comparativa para visualizarlo:
| Número Original | round() | floor() | ceil() |
|---|---|---|---|
| 2.7 | 3 | 2 | 3 |
| 2.3 | 2 | 2 | 3 |
| 2.5 | 3 | 2 | 3 |
| 5.99 | 6 | 5 | 6 |
| 4.01 | 4 | 4 | 5 |
| 7.0 | 7 | 7 | 7 |
Esta tabla resume perfectamente el comportamiento de cada función y te ayuda a decidir cuál es la adecuada para una situación particular.
¿Cuándo Usar Cada Función?
La elección entre round(), floor() y ceil() depende completamente del contexto y la lógica que necesites implementar:
- Usa
round()cuando quieras el entero más cercano al valor original. Es útil para aproximaciones generales o cuando la diferencia de 0.5 es el punto de corte lógico. Por ejemplo, para mostrar un puntaje que permita decimales pero quieres redondearlo para la visualización final, o para calcular la posición aproximada de un objeto. - Usa
floor()cuando necesites el entero inferior. Es ideal para calcular, por ejemplo, cuántas veces "cabe" algo en una cantidad (si tienes 10.5 metros de cuerda y necesitas trozos de 2 metros, puedes hacerfloor(10.5 / 2)que esfloor(5.25)= 5 trozos completos). También es útil para calcular índices de arrays basados en posiciones continuas. - Usa
ceil()cuando necesites el entero superior. Esto es útil, por ejemplo, para calcular cuántos "contenedores" necesitas para una cierta cantidad de ítems (si tienes 13 ítems y cada caja guarda 5, necesitasceil(13 / 5)que esceil(2.6)= 3 cajas). También se usa a menudo en cálculos de paginación o turnos donde cualquier fracción requiere una unidad completa adicional.
Preguntas Frecuentes sobre Redondeo en GameMaker
- ¿Qué es la función
rounden GameMaker? - La función
rounden GameMaker se utiliza para redondear un número flotante al número entero más cercano. Redondea hacia arriba si la parte decimal es 0.5 o mayor, y hacia abajo si es menor que 0.5. - ¿Cómo redondear hacia abajo en GameMaker?
- Para redondear siempre hacia abajo en GameMaker, debes usar la función
floor(). Por ejemplo,floor(5.99)te dará 5, yfloor(5.1)también te dará 5. - ¿Cuál es la diferencia entre
round,flooryceil? - La principal diferencia es el comportamiento del redondeo:
round()redondea al entero más cercano (regla del 0.5),floor()siempre redondea hacia abajo, yceil()siempre redondea hacia arriba. - ¿Estas funciones solo funcionan con números positivos?
- No, estas funciones también funcionan con números negativos. Por ejemplo,
round(-2.7)daría -3,floor(-2.7)daría -3, yceil(-2.7)daría -2.
Dominar estas funciones de redondeo es una pequeña pero importante parte del desarrollo en GameMaker. Te permiten manejar con precisión los números flotantes y convertirlos en los números enteros exactos que tu lógica o tus elementos visuales requieren. Asegúrate de elegir la función correcta para cada tarea para que tus juegos funcionen de manera impecable.
Si quieres conocer otros artículos parecidos a Funciones de Redondeo Esenciales en GameMaker puedes visitar la categoría Maquillaje.
