pasar - TypeScript convertir una cadena a un número
typescript object type (8)
¿Alguien ha sugerido cómo convertir una cadena en un número en TypeScript?
var aNumber : number = "1"; // --> Error
// Could this be done?
var defaultValue = 0;
var aNumber : number = "1".toInt32(defaultValue);
// Or ..
var defaultValue = 0;
var aNumber : number = StringToInt("1", defaultValue);
Actualización: hice un poco de rompecabezas extra, el mejor sofar que he encontrado: var aNumber: number = ("1") * 1;
Verificando si una cadena es numérica se responde aquí: En Typescript, Cómo verificar si una cadena es numérica .
Cadena a la conversión de números:
En Typescript convertimos una cadena a un número de las siguientes maneras:
-
ParseInt()
: esta función toma 2 argumentos, el primero es una cadena para analizar. El segundo es el radix (la base en sistemas de numeración matemática, por ejemplo, 10 para decimal y 2 para binario). A continuación, devuelve el número entero, si el primer carácter no se puede convertir en un número, se devolveráNaN
. -
ParseFloat()
: toma como argumento el valor que queremos analizar y devuelve un número de punto flotante. Si el valor no se puede convertir en un número, se devuelveNaN
. -
+
operador: el operador, cuando se usa apropiadamente, puede forzar un valor de cadena en un número.
Ejemplos:
/* parseInt */
// note that a whole number is returned, so it will round the number
console.log(parseInt(''51.023124''));
// parseInt will ''cut off'' any part of the string which is not a number
console.log(parseInt(''5adfe1234''));
// When the string starts with non number NaN is returned
console.log(parseInt(''z123''));
console.log(''--------'');
/* parseFloat */
// parses the string into a number and keeping the precision of the number
console.log(typeof parseFloat(''1.12321423''));
// parseFloat will ''cut off'' any part of the string which is not a number
console.log(parseFloat(''5.5abc''));
console.log(''--------'');
/* + operator */
let myString = ''12345''
console.log(typeof +myString);
let myOtherString = ''10ab''
// + operator will not cut off any ''non number'' string part and will return NaN
console.log(+myOtherString);
¿Cuál usar?
- Use
ParseInt()
cuando desee convertir una cadena en un entero . Sin embargo, el tipo de datos sigue siendo un valor flotante, ya que todos los valores numéricos son valores de punto flotante en TS . También use este método cuando necesite especificar el radio del número que desea analizar. - Use
ParseFloat()
cuando necesite analizar una cadena en un número de punto flotante . - Puede usar el operador
+
antes de una cadena para convertirlo en un número de punto flotante . La ventaja de esto es que la sintaxis es muy corta.
Como lo muestran otras respuestas aquí, hay varias formas de hacer la conversión:
Number(''123'');
+''123'';
parseInt(''123'');
parseFloat(''123.45'')
Sin embargo, me gustaría mencionar una cosa más en parseInt
.
Cuando se usa parseInt
, tiene sentido pasar siempre el parámetro radix . Para la conversión decimal, eso es 10
. Este es el valor predeterminado para el parámetro, por lo que se puede omitir. Para binario, es un 2
y un 16
para hexadecimal. En realidad, cualquier radix entre e incluyendo 2 y 36 obras.
parseInt(''123'') // 123 (don''t do this)
parseInt(''123'', 10) // 123 (much better)
parseInt(''1101'', 2) // 13
parseInt(''0xfae3'', 16) // 64227
La función parseInt
, bueno, analiza las cadenas para convertirlas en números. En algunas implementaciones de JS, parseInt
analiza los ceros iniciales como octales:
Aunque ECMAScript 3 no lo recomienda y está prohibido por ECMAScript 5, muchas implementaciones interpretan una cadena numérica que comienza con un 0 inicial como octal. Lo siguiente puede tener un resultado octal, o puede tener un resultado decimal. Siempre especifique un radix para evitar este comportamiento poco fiable.
- MDN
El hecho de que el código se aclare es un efecto secundario agradable de especificar el parámetro radix.
Como parseFloat
solo analiza expresiones numéricas en la raíz 10, aquí no hay necesidad de un parámetro de la raíz.
Más sobre esto:
- ¿Por qué necesitamos usar radix? (Pregunta SO)
- SO Respuesta a "¿Cuál es la diferencia entre parseInt () y Number ()?"
Explicando lo que dijo Ryan, TypeScript abarca los modismos de JavaScript en general.
var n = +"1"; // the unary + converts to number
var b = !!"2"; // the !! converts truthy to true, and falsy to false
var s = ""+3; // the ""+ converts to string via toString()
Todos los detalles interesantes en profundidad en la conversión de tipos de JavaScript .
Hay funciones incorporadas como parseInt()
, parseFloat()
y Number()
en Typescript, puedes usarlas.
La forma mecanografiada de hacer esto sería:
Number(''1234'') // 1234
Number(''9BX9'') // NaN
como se responde aquí: https://.com/a/23440948/2083492
Para nuestros compañeros usuarios de Angular:
Dentro de una plantilla , Number(x)
y parseInt(x)
arrojan un error, y +x
no tiene ningún efecto. La conversión válida será x*1
o x/1
.
Puede usar las funciones parseInt
o parseFloat
, o simplemente usar el operador unario +
:
var x = "32";
var y = +x; // y: number
Puedes seguir cualquiera de las siguientes formas.
var str = ''54'';
var num = +str; //easy way by using + operator
var num = parseInt(str); //by using the parseInt operation