with parse numeros number float convertir cadenas javascript string integer parseint

javascript - numeros - parseint java



¿Cómo convierto una cadena en un entero en JavaScript? (21)

¡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

¿Cómo convierto una string en un integer en JavaScript?


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 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


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; }


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


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; }


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á en silencio 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 lugar de eso 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 desencadena al hacer que la cadena comience con 0x si no se especifica un radix, 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.

Cambiar 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 entiende 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 puede ser un 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 puede 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, por lo general, 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 en que descubre que falló el análisis).


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.


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 a nivel de bits deja caer cualquier cosa después del punto decimal Y lo convierte a un formato numérico. 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 here (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 a 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



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 poner 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)


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


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

Por lo tanto, 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.


ParseInt () y + son diferentes

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


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.


Prueba la función parseInt:

var number = parseInt("10");

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

parseInt(string, radix)

Ejemplo:

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


Prueba parseInt.

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


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


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`


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

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

Podemos usar este operador único "+" para analizar el flotador también ...


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.


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

<input id="input" type="text"> <input onclick="doSth()" type="submit"> <span id="number"></span>