Estate atento porque en esta crónica vas a hallar la solución que buscas.
Solución:
La forma más sencilla sería utilizar el nativo Number
función:
var x = Number("1000")
Si eso no funciona para usted, entonces están los parseInt, unario más, parseFloat con piso, y Math.round métodos.
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])
unario más si tu string ya tiene la forma de un número entero:
var x = +"1000";
si tu string es o podría ser un flotante y quieres un número entero:
var x = Math.floor("1000.01"); //floor automatically converts string to number
o, si va a utilizar Math.floor varias veces:
var floor = Math.floor;
var x = floor("1000.01");
Si eres del tipo que se olvida de poner la base 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á un string a la conversión numérica, por lo que si desea redondear el número (o si tiene un número entero en el string), esta es una excelente manera, tal vez mi favorita:
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” usando la función parseInt, lo detecta como un número octal y devolverá el número 8. Por lo tanto, debe especificar una base (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
Tenga en cuenta que parseInt
ignora los datos incorrectos después de analizar cualquier cosa válida.
Esta guía se analizará como 51:
var result = parseInt('51e3daf6-b521-446a-9f5b-a1bb4d8bac36', 10) == 51; // Returns true
Hay dos formas principales de convertir un string a un número en javascript. Una forma es analizarlo y la otra es cambiar su tipo a Número. Todos los trucos en las otras respuestas (por ejemplo, unario más) implican coaccionar implícitamente el tipo de string a un número. También puede hacer lo mismo explícitamente con la función Número.
Analizando
var parsed = parseInt("97", 10);
parseInt y parseFloat son las dos funciones que se utilizan para analizar cadenas en 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 su lugar, recuperará NaN a menos que el string comienza con un número. Espacio en blanco al comienzo del string se ignora. Aquí hay un ejemplo de cómo hace algo diferente a lo que desea y no da ninguna indicación de que algo salió mal:
var widgetsSold = parseInt("97,800", 10); // widgetsSold is now 97
Es una buena práctica especificar siempre la base como segundo argumento. En navegadores antiguos, si el string comenzó con un 0, se interpretaría como octal si no se especificara la raíz, lo que tomó a mucha gente por sorpresa. El comportamiento para hexadecimal se desencadena al tener el string comenzar con 0x si no se especifica ninguna base, por ejemplo 0xff
. El estándar en realidad cambió con ecmascript 5, por lo que los navegadores modernos ya no activan octal cuando hay un 0 a la izquierda si no se ha especificado ninguna raíz. parseInt entiende radixes hasta 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 al string 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 string de lo que regresa NaN
, por lo que no puede usarlo para cadenas como 97px
. Dado que desea un número primitivo en lugar de un objeto de envoltura numérica, 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 flotante en lugar de un entero, por lo que si desea un número entero, debe modificarlo. Hay algunas formas 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 bit a bit (aquí he hecho un bit a bit o, pero también podría hacer una doble negación como en una respuesta anterior o un cambio de bits) convertirá el valor en un entero de 32 bits, y la mayoría de ellos se convertirán en un entero con signo. Tenga en cuenta que esto no querrás que quieras para enteros grandes. Si el número 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, debe utilizar los métodos de redondeo
Math.floor("3000000000.654") === 3000000000
// This is the same as
Math.floor(Number("3000000000.654"))
Tenga en cuenta que coeercion entiende la notación exponencial y el infinito, por lo que 2e2
es 200
en lugar de NaN, 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 desea. Por ejemplo, por lo general, me gustaría que se arrojara 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 Number o uno de los métodos de análisis sea el tipo de número que espera. Es casi seguro que querrás usar isNaN
para asegurarse de que el número no sea NaN (por lo general, la única forma de saber que el análisis falló).
valoraciones y reseñas
Recuerda algo, que tienes el privilegio añadir un diagnóstico acertado si diste con el resultado.