HOWTO · JavaScript

Cómo convertir un número de punto flotante a entero en JavaScript

Aprende a truncar o redondear un Number de JavaScript, analizar texto decimal y evitar atajos bit a bit inseguros.

En esta página

JavaScript no tiene tipos separados int y float; normalmente ambos se representan con Number. Para eliminar la parte fraccionaria de un valor numérico existente, usa Math.trunc(), que trunca hacia cero. Esta operación se denomina truncamiento hacia cero:

console.log(Math.trunc(12.75));
console.log(Math.trunc(-12.75));

Salida:

12
-12

La elección depende del resultado que necesites:

  • Usa Math.trunc(value) para descartar la parte fraccionaria hacia cero.
  • Usa Math.floor(value) o Math.ceil(value) cuando importe la dirección del redondeo.
  • Usa Math.round(value) para elegir el entero más cercano.
  • Usa parseInt(text, 10) si la entrada es texto decimal, no como forma predeterminada de truncar un Number.

Truncar un número con Math.trunc()

Math.trunc() devuelve la parte entera sin redondear. En valores positivos elimina todo lo que sigue al punto decimal. En valores negativos se acerca a cero: -12.75 se convierte en -12, no en -13.

const value = -12.75;

console.log(Math.trunc(12.75));
console.log(Math.trunc(value));

Salida:

12
-12

Suele ser la opción más clara cuando el valor ya es numérico y solo necesitas conservar la parte entera. Un valor entre -1 y 0 puede producir cero negativo:

console.log(Object.is(Math.trunc(-0.5), -0));

Salida:

true

Si tu aplicación debe distinguir -0 de 0, trata ese caso de forma explícita.

Elegir floor(), ceil() o round() para redondear

Truncar y redondear son operaciones distintas. Math.floor() devuelve el entero mayor que sea menor o igual al valor, mientras que Math.ceil() devuelve el menor entero mayor o igual. La diferencia es especialmente importante con valores negativos:

const value = -12.75;

console.log(Math.floor(value));
console.log(Math.ceil(value));
console.log(Math.round(-1.5));

Salida:

-13
-12
-1

Usa Math.floor() como límite inferior, Math.ceil() como límite superior y Math.round() cuando quieras el entero más cercano. En empates, Math.round() redondea hacia infinito positivo; por eso Math.round(-1.5) devuelve -1.

Analizar texto decimal con parseInt()

Cuando el origen es una cadena, parseInt() puede analizar su prefijo entero. Pasa 10 como base para texto decimal:

console.log(parseInt("12.75", 10));
console.log(Number.isNaN(parseInt("not a number", 10)));

Salida:

12
true

parseInt() tiene semántica de análisis: puede detenerse al encontrar un carácter no válido para la base. Por eso no equivale a truncar un número existente. Por ejemplo, Math.trunc(Number("12.75")) es apropiado si primero debes convertir y validar toda la entrada. Usa Number.isNaN() u otra regla cuando pueda haber entradas no válidas.

Evitar toFixed() y atajos bit a bit para conversiones generales

Number.toFixed() es un método de formato. Redondea al número de decimales indicado y devuelve una cadena, por lo que no es un método general para convertir a entero:

console.log(typeof (12.75).toFixed(0));

Salida:

string

Expresiones bit a bit como value | 0, ~~value y value >> 0 también truncan hacia cero, pero primero convierten el valor en un entero con signo de 32 bits. Los valores fuera de ese rango pueden desbordarse:

console.log(2 ** 31 | 0);

Salida:

-2147483648

Usa estas expresiones solo cuando necesites una coerción deliberada a Int32 con signo. No son reemplazos más seguros ni claros de Math.trunc().

Límites que debes recordar

Number usa representación de coma flotante de doble precisión IEEE 754. Los enteros solo se representan exactamente hasta Number.MAX_SAFE_INTEGER y Number.MIN_SAFE_INTEGER; usa Number.isSafeInteger() cuando importe la aritmética exacta y trata explícitamente los valores no finitos:

console.log(Math.trunc(Infinity));
console.log(Math.trunc(NaN));

Salida:

Infinity
NaN

Math.trunc() no convierte Infinity, -Infinity ni NaN en enteros finitos. Valida la entrada si tu aplicación requiere un entero seguro y finito.

Resumen

Para un número JavaScript existente, empieza con Math.trunc(value) si “entero” significa eliminar la parte fraccionaria hacia cero. Elige Math.floor(), Math.ceil() o Math.round() según la regla necesaria. Usa parseInt(text, 10) para texto decimal, recuerda que toFixed() produce texto formateado y evita atajos bit a bit salvo que la coerción con signo de 32 bits sea intencional.