¿Convertir una cadena a un entero en JavaScript?

¿Cómo convierto una cadena a un entero en JavaScript?

22 Solutions collect form web for “¿Convertir una cadena a un entero en JavaScript?”

La forma más sencilla sería utilizar la función de Number nativo:

 var x = Number("1000") 

Si eso no funciona para usted, entonces están los métodos parseInt , unary plus , parseFloat con floor y Math.round .

parseInt

 var x = parseInt("1000", 10); // you want to use radix 10 // so you get a decimal number even with a leading 0 and an old browser ([IE8, Firefox 20, Chrome 22 and older][1]) 

unary plus si su cadena ya tiene la forma de un entero:

 var x = +"1000"; 

Si su cadena es o podría ser una flotación y desea un entero:

 var x = Math.floor("1000.01"); //floor automatically converts string to number 

O, si vas a usar Math.floor varias veces:

 var floor = Math.floor; var x = floor("1000.01"); 

Si eres del tipo que se olvida de colocar el radix cuando llamas a parseInt, puedes usar parseFloat y redondearlo como quieras. Aquí uso suelo.

 var floor = Math.floor; var x = floor(parseFloat("1000.01")); 

Curiosamente, Math.round (como Math.floor) hará una conversión de cadena a número, por lo que si desea que el número se redondee (o si tiene un número entero en la cadena), esta es una excelente manera, tal vez mi favorito:

 var round = Math.round; var x = round("1000"); //equivalent to round("1000",0) 

Prueba la función parseInt:

 var number = parseInt("10"); 

Pero hay un problema. Si intenta convertir “010” utilizando la función parseInt, se detecta como un número octal y devolverá el número 8. Por lo tanto, debe especificar un radix (de 2 a 36). En este caso la base 10.

 parseInt(string, radix) 

Ejemplo:

 var result = parseInt("010", 10) == 10; // Returns true var result = parseInt("010") == 10; // Returns false 

Tenga en cuenta que parseInt ignora los datos incorrectos después de analizar cualquier cosa válida.
Este guid se analizará como 51:

 var result = parseInt('51e3daf6-b521-446a-9f5b-a1bb4d8bac36', 10) == 51; // Returns true 

Hay dos formas principales de convertir una cadena a un número en javascript. Una forma es analizarlo y la otra forma es cambiar su tipo a un Número. Todos los trucos en las otras respuestas (por ejemplo, unary plus) implican coaccionar implícitamente el tipo de la cadena a un número. También puede hacer lo mismo explícitamente con la función Número.

Análisis

 var parsed = parseInt("97", 10); 

parseInt y parseFloat son las dos funciones utilizadas para analizar cadenas a números. El análisis se detendrá silenciosamente si golpea un carácter que no reconoce, lo que puede ser útil para analizar cadenas como “92px”, pero también es algo peligroso, ya que no le dará ningún tipo de error en una entrada incorrecta, en su lugar Obtendré NaN a menos que la cadena comience con un número. Se omite el espacio en blanco al principio de la cadena. Aquí hay un ejemplo de cómo hacer algo diferente a lo que quieres, y no dar ninguna indicación de que algo haya salido mal:

 var widgetsSold = parseInt("97,800", 10); // widgetsSold is now 97 

Es una buena práctica especificar siempre la raíz como segundo argumento. En los navegadores más antiguos, si la cadena comenzaba con un 0, se interpretaría como octal si no se especificaba la raíz, lo que tomaba por sorpresa a muchas personas. El comportamiento para hexadecimal se activa al hacer que la cadena comience con 0x si no se especifica ningún tipo de raíz, por ejemplo, 0xff . El estándar realmente cambió con ecmascript 5, por lo que los navegadores modernos ya no activan octal cuando hay un 0 inicial si no se ha especificado ningún radix. parseInt entiende radixes hasta la base 36, en cuyo caso las letras mayúsculas y minúsculas se tratan como equivalentes.

Cambiando el tipo de una cadena a un número

Todos los otros trucos mencionados anteriormente que no usan parseInt, implican coaccionar implícitamente la cadena en un número. Prefiero hacer esto explícitamente,

 var cast = Number("97"); 

Esto tiene un comportamiento diferente a los métodos de análisis (aunque todavía ignora los espacios en blanco). Es más estricto: si no comprende la totalidad de la cadena que devuelve NaN , no puede usarla para cadenas como 97px . Dado que desea un número primitivo en lugar de un objeto de envoltorio numérico, asegúrese de no poner new delante de la función Número.

Obviamente, la conversión a un Número le da un valor que podría ser un valor flotante en lugar de un entero, por lo que si desea un entero, debe modificarlo. Hay algunas maneras de hacer esto:

 var rounded = Math.floor(Number("97.654")); // other options are Math.ceil, Math.round var fixed = Number("97.654").toFixed(0); // rounded rather than truncated var bitwised = Number("97.654")|0; // do not use for large numbers 

Cualquier operador bitwise (aquí he hecho bitwise o, pero también podría hacer doble negación como en una respuesta anterior o un bithift) convertirá el valor a un entero de 32 bits, y la mayoría de ellos se convertirá a un entero con signo. Tenga en cuenta que esto no quiere que desee para enteros grandes . Si el entero no se puede representar en 32 bits, se ajustará.

 ~~"3000000000.654" === -1294967296 // This is the same as Number("3000000000.654")|0 "3000000000.654" >>> 0 === 3000000000 // unsigned right shift gives you an extra bit "300000000000.654" >>> 0 === 3647256576 // but still fails with larger numbers 

Para trabajar correctamente con números más grandes, debes usar los métodos de redondeo.

 Math.floor("3000000000.654") === 3000000000 // This is the same as Math.floor(Number("3000000000.654")) 

Tenga en cuenta que todos estos métodos comprenden la notación exponencial, por lo que 2e2 es 200 lugar de NaN. Además, Number entiende “Infinito”, mientras que los métodos de análisis no lo hacen.

Personalizado

Es poco probable que alguno de estos métodos haga exactamente lo que quieres. Por ejemplo, normalmente me gustaría que se produjera un error si falla el análisis, y no necesito soporte para Infinity, exponenciales o espacios en blanco iniciales. Dependiendo de su caso de uso, a veces tiene sentido escribir una función de conversión personalizada.

Siempre verifique que la salida de Número o uno de los métodos de análisis sea el tipo de número que espera. Es casi seguro que querrá usar isNaN para asegurarse de que el número no sea NaN (por lo general, la única forma de que descubra que el análisis ha fallado).

ParseInt () y + son diferentes

 parseInt("10.3456") // returns 10 +"10.3456" // returns 10.3456 

Aunque es una pregunta antigua, pero quizás esto pueda ser útil para alguien.

Uso esta forma de convertir una cadena a un número int.

 var str = "25"; // string var number = str*1; // number 

Entonces, al multiplicar por 1, el valor no cambia, pero js automáticamente devuelve un número.

Pero como se muestra a continuación, esto debe usarse si está seguro de que la str es un número (o se puede representar como un número), de lo contrario devolverá NaN, no un número.

Puede crear una función simple para usar, por ejemplo

 function toNumber(str) { return str*1; } 

introduzca la descripción de la imagen aquí

Prueba parseInt.

 var number = parseInt("10", 10); //number will have value of 10. 

He publicado la respuesta incorrecta aquí, lo siento. fijo.

Esta es una vieja pregunta, pero me encanta este truco:

 ~~"2.123"; //2 ~~"5"; //5 

El doble negativo en el modo de bits deja caer cualquier cosa después del punto decimal Y lo convierte a un formato de número. Me han dicho que es un poco más rápido que llamar a funciones y otras cosas, pero no estoy del todo convencido.

EDITAR: Otro método que acabo de ver aquí (una pregunta sobre el operador >>> de javascript, que es un desplazamiento a la derecha de relleno cero) que muestra que cambiar un número por 0 con este operador convierte el número en un uint32, lo cual es bueno si También lo quiero sin firmar . Nuevamente, esto se convierte en un entero sin signo , lo que puede llevar a comportamientos extraños si usa un número firmado.

 "-2.123" >>> 0; // 4294967294 "2.123" >>> 0; // 2 "-5" >>> 0; // 4294967291 "5" >>> 0; // 5 

Lo más rápido

 var x = "1000"*1; 

Prueba

Aquí hay una pequeña comparación de velocidad (solo Mac OS) … 🙂

Para chrome ‘plus’ y ‘mul’ son los más rápidos (> 700,000,00 op / s), ‘Math.floor’ es el más lento. Para Firefox, ‘plus’ es el más lento (!) ‘Mul’ es el más rápido (> 900,000,000 op / seg). En Safari, “parseInt” es rápido, “número” es el más lento (pero los resultados son bastante similares,> 13,000,000 <31,000,000). Por lo tanto, Safari para la cadena de caracteres a int es más de 10 veces más lento que otros navegadores. Así que el ganador es ' mul ‘ 🙂

Puede ejecutarlo en su navegador por este enlace https://jsperf.com/casttonumber

introduzca la descripción de la imagen aquí

Actualizar

También pruebo var x = ~~"1000"; – en Chrome y Safari es un poco más lento que var x = "1000"*1 (<1%), en Firefox es un poco más rápido (<1%).

¡Cuidado si usa ParseInt para convertir un flotador en notación científica! Por ejemplo:

 parseInt("5.6e-14") 

resultará en

 5 

en lugar de

 0 

También como una nota al margen: Mootools tiene la función toInt () que se usa en cualquier cadena nativa (o float (o entero)).

 "2".toInt() // 2 "2px".toInt() // 2 2.toInt() // 2 

Por favor, vea el ejemplo a continuación. Ayudará a aclarar sus dudas.

 Example Result parseInt("4") 4 parseInt("5aaa") 5 parseInt("4.33333") 4 parseInt("aaa"); NaN (means "Not a Number") 

Usando la función parseint. Solo dará una op del entero presente y no la cadena.

Para convertir una cadena en un entero, recomiendo usar parseFloat y NO parseInt. Este es el por qué:

Utilizando parseFloat:

 parseFloat('2.34cms') //Output: 2.34 parseFloat('12.5') //Output: 12.5 parseFloat('012.3') //Output: 12.3 

Utilizando parseInt:

 parseInt('2.34cms') //Output: 2 parseInt('12.5') //Output: 12 parseInt('012.3') //Output: 12 

Entonces, si ha notado que parseInt descarta los valores después de los decimales, mientras que parseFloat le permite trabajar con números de punto flotante y, por lo tanto, más adecuado si desea conservar los valores después de los decimales. Use parseInt si y solo si está seguro de que desea el valor entero.

podemos usar +(stringOfNumber) lugar de usar parseInt(stringOfNumber)

Ej: +("21") devuelve int de 21 como parseInt("21") .

También podemos usar este operador “+” único para analizar el flotador …

Intente str - 0 para convertir la string en number .

 > str = '0' > str - 0 0 > str = '123' > str - 0 123 > str = '-12' > str - 0 -12 > str = 'asdf' > str - 0 NaN > str = '12.34' > str - 0 12.34 

Aquí hay dos enlaces para comparar el rendimiento de varias formas de convertir cadenas a int.

https://jsperf.com/number-vs-parseint-vs-plus

http://phrogz.net/js/string_to_number.html

Hay muchas formas en JavaScript de convertir una cadena a un valor numérico … Todas sencillas y prácticas, elija la forma en que más le convenga:

 var num = Number("999.5"); //999.5 var num = parseInt("999.5", 10); //999 var num = parseFloat("999.5"); //999.5 var num = +"999.5"; //999.5 

Además, cualquier operación matemática los convierte en números, por ejemplo …

 var num = "999.5" / 1; //999.5 var num = "999.5" * 1; //999.5 var num = "999.5" - 1 + 1; //999.5 var num = "999.5" - 0; //999.5 var num = Math.floor("999.5"); //999 var num = ~~"999.5"; //999 

Mi forma preferida es usar el signo + , que es la forma elegante de convertir una cadena a un número en JavaScript.

Google me dio esta respuesta como resultado, así que …

Realmente necesitaba “guardar” una cadena como un entero, para un enlace entre C y JavaScript, así que convierto la cadena en un valor entero:

 /* Examples: int2str( str2int("test") ) == "test" // true int2str( str2int("t€st") ) // "t¬st", because "€".charCodeAt(0) is 8364, will be AND'ed with 0xff Limitations: max 4 chars, so it fits into an integer */ function str2int(the_str) { var ret = 0; var len = the_str.length; if (len >= 1) ret += (the_str.charCodeAt(0) & 0xff) < < 0; if (len >= 2) ret += (the_str.charCodeAt(1) & 0xff) < < 8; if (len >= 3) ret += (the_str.charCodeAt(2) & 0xff) < < 16; if (len >= 4) ret += (the_str.charCodeAt(3) & 0xff) < < 24; return ret; } function int2str(the_int) { var tmp = [ (the_int & 0x000000ff) >> 0, (the_int & 0x0000ff00) >> 8, (the_int & 0x00ff0000) >> 16, (the_int & 0xff000000) >> 24 ]; var ret = ""; for (var i=0; i<4; i++) { if (tmp[i] == 0) break; ret += String.fromCharCode(tmp[i]); } return ret; } 

En mi opinión, ninguna respuesta cubre todos los casos de borde, ya que analizar un flotador debería dar como resultado un error.

 function parseInteger(value) { if(value === '') return NaN; const number = Number(value); return Number.isInteger(number) ? number : NaN; } 
 parseInteger("4") // 4 parseInteger("5aaa") // NaN parseInteger("4.33333") // NaN parseInteger("aaa"); // NaN 

Todas las anteriores son correctas. Por favor, asegúrese antes de que este sea un número en una cadena haciendo “typeot x === ‘number'” de lo contrario, devolverá NaN

  var num = "fsdfsdf242342"; typeof num => 'string'; var num1 = "12423"; typeof num1 => 'number'; +num1 = > 12423` 

Otra opción es duplicar XOR el valor consigo mismo:

 var i = 12.34; console.log('i = ' + i); console.log('i ⊕ i ⊕ i = ' + (i ^ i ^ i)); 

Esto dará como resultado:

 i = 12.34 i ⊕ i ⊕ i = 12 
 function doSth(){ var a = document.getElementById('input').value; document.getElementById('number').innerHTML = toNumber(a) + 1; } function toNumber(str){ return +str; } 
    

yo uso esto

 String.prototype.toInt = function (returnval) { var i = parseInt(this); return isNaN(i) ? returnval !== undefined ? returnval : - 1 : i; } 

De esta manera siempre recibo un int de vuelta.

Solo agregué uno más (+) antes de la cadena y ¡esa fue la solución!

 +"052254" //52254 

Espero eso ayude 😉

  • parseInt siempre devuelve NaN?
  • Cómo analizar una cadena con el 0 principal
  • ¿Por qué parseInt no testing las matrices correctamente en Javascript?
  • IE8: parseInt ('07 ') contra parseInt ('08')
  • ¿Por qué mi function parseInt no está convirtiendo mi cadena en un número integer?
  • Usando el parseInt de JavaScript al final de la cadena
  • ¿Por qué parseInt (1/0, 19) devuelve 18?
  • parseInt () analiza el número de literales con exponente incorrectamente
  • parseInt devuelve NaN cuando debería ser un número?
  • ¿Cómo convierto una cadena en un integer en JavaScript?
  • ¿Hay un equivalente al parseInt de JavaScript en C #?
  • Javascript tiene muchos buenos JS marco (como Node.js AngularJS Vue.js React.js) es el mejor lenguaje de script.