¿Cómo convierto una cadena a un entero en JavaScript?
javascript
string
integer
data-conversion
cubuspl42
fuente
fuente
Respuestas:
La forma más sencilla sería utilizar la
Number
función nativa :Si eso no funciona para usted, existen los métodos parseInt , unary plus , parseFloat with floor y Math.round .
parseInt:
unario más si su cadena ya tiene la forma de un entero:
si su cadena es o podría ser flotante y desea un número entero:
o, si vas a usar Math.floor varias veces:
Si eres del tipo que se olvida de poner la raíz cuando llamas a parseInt, puedes usar parseFloat y redondearlo como quieras. Aquí uso el piso.
Curiosamente, Math.round (como Math.floor) realizará una conversión de cadena a número, por lo que si desea redondear el número (o si tiene un número entero en la cadena), esta es una excelente manera, tal vez mi favorito:
fuente
'4'>>0
y'4'>>>0
.parseInt
yparseFloat
felizmente acepta cartas. SoloNumber
regresaNaN
consistentemente.NaN
para cada valor que no sea exactamente un número entero. Por lo tanto, ninguno de estos funciona comoNumber('2.2')
coacción2
yNumber('')
coacción a 0.Prueba la función parseInt:
Pero hay un problema. Si intenta convertir "010" usando la función parseInt, detecta como número octal y devolverá el número 8. Por lo tanto, debe especificar una raíz (de 2 a 36). En este caso base 10.
Ejemplo:
Tenga en cuenta que
parseInt
ignora los datos incorrectos después de analizar algo válido.Esta guía se analizará como 51:
fuente
parseInt('0asdf', 10)
produce0
.Hay dos formas principales de convertir una cadena en un número en javascript. Una forma es analizarlo y la otra es cambiar su tipo a un Número. Todos los trucos en las otras respuestas (por ejemplo, unario más) 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.
Analizando
parseInt y parseFloat son las dos funciones utilizadas para analizar cadenas a números. El análisis se detendrá en silencio si golpea a un personaje 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. Volveré a NaN a menos que la cadena comience con un número. El espacio en blanco al comienzo de la cadena se ignora. Aquí hay un ejemplo de que hace algo diferente a lo que desea y no da indicios de que algo salió mal:
Es una buena práctica especificar siempre la raíz como el segundo argumento. En los navegadores más antiguos, si la cadena comenzara con un 0, se interpretaría como octal si no se especificara la raíz, lo que sorprendió a mucha gente. El comportamiento para hexadecimal se desencadena haciendo que la cadena comience con 0x si no se especifica una raíz, 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 inicial si no se ha especificado la raíz. parseInt comprende 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 forzar implícitamente la cadena en un número. Prefiero hacer esto explícitamente
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 toda la cadena de lo que devuelve
NaN
, entonces no puede usarla para cadenas como97px
. Como desea un número primitivo en lugar de un objeto contenedor de números, asegúrese de no ponernew
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 entero, debe modificarlo. Hay algunas formas de hacerlo:
Cualquier operador bit a bit (aquí he hecho un bit a bit o, pero también podría hacer doble negación como en una respuesta anterior o un desplazamiento de bits) convertirá el valor a un entero de 32 bits, y la mayoría de ellos se convertirá en un entero con signo. Tenga en cuenta que esto no querrá lo que quiere para enteros grandes . Si el número entero no se puede representar en 32 bits, se ajustará.
Para trabajar correctamente con números más grandes, debe usar los métodos de redondeo
Tenga en cuenta que todos estos métodos entienden la notación exponencial, por lo que
2e2
es200
más que NaN. Además, Number entiende "Infinito", mientras que los métodos de análisis no.Personalizado
Es poco probable que alguno de estos métodos haga exactamente lo que quieres. Por ejemplo, generalmente me gustaría que se arroje 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. Seguramente querrá usar
isNaN
para asegurarse de que el número no sea NaN (por lo general, la única forma de descubrir que el análisis falló).fuente
97,8,00
y similar o no. Un truco simple es hacer.replace(/[^0-9]/g, "")
lo que eliminará todos los dígitos que no sean de su cadena y luego realizará la conversión. Por supuesto, esto no hará caso de todo tipo de cuerdas locas que probablemente debería de error en lugar de sólo de análisis ....replace(/[^0-9.]/g, "")
, de lo contrario "1.05" se convertirá en "105".var fixed = Number("97.654").toFixed(0); // rounded rather than truncated
, estamos obteniendo unstring
(debido al.toFixed
método) en lugar de unnumber
(entero). Si queremos el número entero redondeado, probablemente sea mejor usarloMath.round("97.654");
ParseInt () y + son diferentes
fuente
Aunque es una vieja pregunta, pero tal vez esto pueda ser útil para alguien.
Yo uso esta forma de convertir una cadena a
intnúmeroEntonces, cuando se multiplica por 1, el valor no cambia, pero js devuelve automáticamente un número.
Pero como se muestra a continuación, esto debe usarse si está seguro de que
str
es un número (o puede representarse como un número), de lo contrario devolverá NaN, no un número.puede crear funciones simples para usar, por ejemplo
fuente
Lo más rápido
Prueba
Aquí hay una pequeña comparación de la velocidad (solo Mac Os) ... :)
Para Chrome 'plus' y 'mul' son los más rápidos (> 700,000,00 op / sec), '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 / sec). En Safari, 'parseInt' es ayuno, 'número' es el más lento (pero los resulats son bastante similares,> 13,000,000 <31,000,000). Entonces Safari para transmitir cadenas a int es más de 10 veces más lento que otros navegadores. Entonces el ganador es ' mul ' :)
Puede ejecutarlo en su navegador mediante este enlace https://jsperf.com/js-cast-str-to-number/1
Actualizar
También pruebo
var x = ~~"1000";
: en Chrome y Safari es un poco más lento quevar x = "1000"*1
(<1%), en Firefox es un poco más rápido (<1%). Actualizo la imagen de arriba y pruebofuente
Prueba parseInt.
fuente
Publiqué la respuesta incorrecta aquí, lo siento. fijo.
Esta es una vieja pregunta, pero me encanta este truco:
El negativo doble bit a bit deja 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 completamente convencido.
EDITAR: Otro método que acabo de ver aquí (una pregunta sobre el operador javascript >>>, que es un desplazamiento a la derecha de relleno a cero) que muestra que desplazar un número por 0 con este operador convierte el número en uint32, lo cual es bueno si También lo quiero sin firmar . Nuevamente, esto se convierte en un entero sin signo , lo que puede conducir a comportamientos extraños si usa un número con signo.
fuente
¡Tenga cuidado si usa parseInt para convertir un flotador en notación científica! Por ejemplo:
resultará en
en vez de
fuente
parseInt
no funcionaría bien para un flotador.parseFloat
Funciona correctamente en este caso.Para convertir una Cadena en Entero, recomiendo usar parseFloat y NO parseInt. Este es el por qué:
Usando parseFloat:
Usando parseInt:
Entonces, si ha notado que parseInt descarta los valores después de los decimales, mientras que parseFloat le permite trabajar con números de coma flotante y, por lo tanto, es más adecuado si desea retener los valores después de los decimales. Use parseInt si y solo si está seguro de que desea el valor entero.
fuente
También como nota al margen: Mootools tiene la función toInt () que se usa en cualquier cadena nativa (o flotante (o entero)).
fuente
SyntaxError
, debe usar un punto doble, por ejemplo:2..toInt();
el primer punto terminará la representación de unNumber
literal y el segundo punto es el descriptor de acceso de propiedad.Vea el ejemplo a continuación. Le ayudará a aclarar sus dudas.
mediante el uso de la función parseint Solo dará op de entero presente y no la cadena
fuente
podemos usar en
+(stringOfNumber)
lugar de usarparseInt(stringOfNumber)
Ej:
+("21")
devuelve int de 21 como elparseInt("21")
.también podemos usar este operador unario "+" para analizar flotante ...
fuente
+
?parseInt
es. Una implementación común es laconst myNumber = +myNumberAsAString
que parece un estándar+=
u=+
operador a primera vista. Además, si se usa incorrectamente, podría provocar errores de concatenación. Esta solución se basa en el hecho de que 0 se supone como el lado izquierdo cuando no se proporciona ningún número.Intenta
str - 0
convertirstring
anumber
.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
fuente
'1'
se convertirá en1
porToNumber
, entonces1 - 0
sería1
Hay muchas formas en JavaScript para convertir una cadena en un valor numérico ... Todo simple y práctico, elija la forma en que funciona para usted:
Además, cualquier operación matemática los convierte en números, por ejemplo ...
Mi forma preferida es usar el
+
signo, que es la forma elegante de convertir una cadena a número en JavaScript.fuente
Google me dio esta respuesta como resultado, así que ...
De hecho, necesitaba "guardar" una cadena como un entero, para un enlace entre C y JavaScript, por lo que convierto la cadena en un valor entero:
fuente
int2str
función se detiene si un byte es 0, lo que podría ser un elemento legítimo dentro del valor, por lo queif
...break
debe eliminarse para que se devuelva un valor completo de 4 bytes.En mi opinión, ninguna respuesta cubre todos los casos extremos, ya que analizar un flotante debería provocar un error.
fuente
parseInteger
, noparseNumber
. Supongo que todas las soluciones son una solución ya que JS no admite enteros y flotantes como tipos separados. Podríamos regresar ennull
lugar deNaN
, si no un número es engañoso.Aquí está la solución más fácil.
Solución más fácil
fuente
Todas las anteriores son correctas. Antes de asegurarse de que se trata de un número en una cadena, haga "typeot x === 'número'"; de lo contrario, devolverá NaN
fuente
var num1 = "12423"; typeof num1;
devuelvestring
.Otra opción es duplicar XOR el valor consigo mismo:
Esto generará:
fuente
¡Solo agregué un signo más (+) antes de la cadena y esa fue la solución!
Espero eso ayude ;)
fuente
Sumando la multiplicación de dígitos con su respectiva potencia de diez:
es decir: 123 = 100 + 20 + 3 = 1 * 100 + 2 + 10 + 3 * 1 = 1 * (10 ^ 2) + 2 * (10 ^ 1) + 3 * (10 ^ 0)
}
fuente
fuente
yo uso esto
de esta manera siempre obtengo un int int.
fuente
La forma más segura de asegurarse de obtener un número entero válido:
Ejemplos:
fuente
fuente
puedes usar más, por ejemplo =>
var personAge = '24'; var personAge1 = (+ personAge)
entonces puedes ver el tipo de persona La edad es el número
fuente