Quelqu'un a une suggestion sur la façon de convertir une chaîne en un nombre dans 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);
Mise à jour: J'ai fait un peu plus de perplexité, le meilleur logiciel que j'ai créé: var aNuméro: numéro = ("1") * 1;
ici, on vérifie si une chaîne est numérique: Dans TypeScript, Comment vérifier si une chaîne est Numérique .
Vous pouvez utiliser les fonctions parseInt
ou parseFloat
ou simplement utiliser l'opérateur unaire +
:
var x = "32";
var y = +x; // y: number
La manière de faire ceci est la suivante:
Number('1234') // 1234
Number('9BX9') // NaN
comme répondu ici: https://stackoverflow.com/a/23440948/2083492
Pour nos collègues utilisateurs angulaires:
Dans un template , Number(x)
et parseInt(x)
renvoie une erreur, et +x
n'a aucun effet. Le casting valide sera x*1
ou x/1
.
Expliquant ce que Ryan a dit, TypeScript englobe les idiomes JavaScript en général.
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()
Tous les détails détaillés intéressants à Conversion de types JavaScript .
Comme le montrent d'autres réponses ici, il existe plusieurs façons d'effectuer la conversion:
Number('123');
+'123';
parseInt('123');
parseFloat('123.45')
Je voudrais cependant mentionner une dernière chose sur parseInt
.
Lorsque vous utilisez parseInt
, il est logique de toujours transmettre le paramètre radix. Pour la conversion décimale, il s'agit de 10
. Il s’agit de la valeur par défaut du paramètre. C’est pourquoi peut être omis. Pour le binaire, c’est 2
et 16
pour hexadécimal. En réalité, toute base comprise entre 2 et 36 inclus.
parseInt('123') // 123 (don't do this)
parseInt('123', 10) // 123 (much better)
parseInt('1101', 2) // 13
parseInt('0xfae3', 16) // 64227
La fonction parseInt
analyse les chaînes pour les convertir en nombres. Dans certaines implémentations de JS, parseInt
analyse les zéros de tête sous forme octale:
Bien que découragé par ECMAScript 3 et interdit par ECMAScript 5, de nombreuses implémentations interprètent une chaîne numérique commençant par un 0 au début octal. Ce qui suit peut avoir un résultat octal ou décimal. Spécifiez toujours une base pour éviter ce comportement peu fiable.
- MDN
Le fait que le code devienne plus clair est un effet secondaire sympa de la spécification du paramètre radix.
Puisque parseFloat
n’analyse que les expressions numériques de la base 10, il n’est pas nécessaire de définir un paramètre de base ici.
Plus sur ceci:
Vous pouvez suivre l’une des méthodes suivantes.
var str = '54';
var num = +str; //easy way by using + operator
var num = parseInt(str); //by using the parseInt operation
Dans TypeScript, nous convertissons une chaîne en un nombre des manières suivantes:
ParseInt()
: Cette fonction prend 2 arguments, le premier est une chaîne à analyser. La seconde est la base (la base dans les systèmes de nombres mathématiques, par exemple 10 pour décimal et 2 pour binaire). Il renvoie ensuite le nombre entier. Si le premier caractère ne peut pas être converti en un nombre, NaN
sera renvoyé.ParseFloat()
: prend comme argument la valeur que nous voulons analyser et renvoie un nombre à virgule flottante. Si la valeur ne peut pas être convertie en nombre, NaN
est renvoyé.+
: Lorsqu'il est utilisé correctement, l'opérateur peut contraindre une valeur de chaîne en un nombre./* 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);
ParseInt()
lorsque vous souhaitez convertir une chaîne en integer. Cependant, le type de données est toujours un float, puisque toutes les valeurs numériques sont des valeurs à virgule flottante dans TS. Utilisez également cette méthode lorsque vous devez spécifier la base du nombre que vous souhaitez analyser.ParseFloat()
lorsque vous devez analyser une chaîne dans un nombre à virgule flottante.+
avant une chaîne pour la contraindre à un nombre à virgule flottante. L'avantage de ceci est que la syntaxe est très courte.Il existe des fonctions intégrées telles que parseInt()
, parseFloat()
et Number()
dans TypeScript, vous pouvez les utiliser.
Il y a trois façons
let a = + '12';
let b = parseInt('12' , 10); // 10 means decimal number
let c = Number('12');
Beaucoup d'entre vous rencontrent un problème pour convertir les types de données sont difficiles à résoudre dans les situations de programmation ionic, parce que ce langage est nouveau, ici je vais détailler les instructions pour que l'utilisateur sache comment convertir data ionic types en chaîne nombre entier de type de données.
Dans des langages de programmation tels que Java, php, c, c ++, ... tous peuvent déplacer des données facilement, puis dans ionic peut également créer pour nous la conversion de données est également un moyen simple, pas moins dans d'autres langages de programmation.
this.mPosition = parseInt("");
Voici une version modifiée de la fonction StrToNumber. Comme avant,
Cette réponse est une solution possible qui convient mieux à la question initiale que mon précédent post.
static StrToNumber(val: string, defaultVal:number = 0): number
{
let result:number = defaultVal;
if(val == null)
return result;
if(val.length == 0)
return result;
val = val.trim();
if(val.length == 0)
return(result);
let sign:number = 1;
//
// . obtain sign from string, and place result in "sign" local variable. The Sign naturally defaults to positive
// 1 for positive, -1 for negative.
// . remove sign character from val.
// Note, before the function returns, the result is multiplied by the sign local variable to reflect the sign.
// . error check for multiple sign characters
// . error check to make sure sign character is at the head or tail of the string
//
{
let positiveSignIndex = val.indexOf('+');
let negativeSignIndex = val.indexOf('-');
let nTailIndex = val.length-1;
//
// make sure both negative and positive signs are not in the string
//
if( (positiveSignIndex != -1) && (negativeSignIndex != -1) )
return result;
//
// handle postive sign
//
if (positiveSignIndex != -1)
{
//
// make sure there is only one sign character
//
if( (positiveSignIndex != val.lastIndexOf('+')) )
return result;
//
// make sure the sign is at the head or tail
//
if( (positiveSignIndex > 0) && (positiveSignIndex < nTailIndex ) )
return result;
//
// remove sign from string
//
val = val.replace("+","").trim();
}
//
// handle negative sign
//
if (negativeSignIndex != -1)
{
//
// make sure there is only one sign character
//
if( (negativeSignIndex != val.lastIndexOf('-')) )
return result;
//
// make sure the sign is at the head or tail
//
if( (negativeSignIndex > 0) && (negativeSignIndex < nTailIndex ) )
return result;
//
// remove sign from string
//
val = val.replace("-","").trim();
sign = -1;
}
//
// make sure text length is greater than 0
//
if(val.length == 0)
return result;
}
//
// convert string to a number
//
var r = +(<any>val);
if( (r != null) && (!isNaN(r)) )
{
result = r*sign;
}
return(result);
}
Appelez la fonction avec => convertstring ('10 .00 ')
parseFloat (string) => Il peut être utilisé pour convertir en float. toFixed (4) => à combien de décimales
parseInt (str) => Il peut être utilisé pour convertir en entier
convertstring(string){
let number_parsed: any = parseFloat(string).toFixed(4)
return number_parsed
}
si vous parlez uniquement de types, comme d'autres personnes l'ont dit, parseInt (), etc. renverra le type correct. De plus, si pour une raison quelconque, la valeur peut être à la fois un nombre ou une chaîne et que vous ne souhaitez pas appeler parseInt (), les expressions typeof seront également converties dans le type correct:
function f(value:number|string){
if(typeof value==='number'){
// value : number
}else {
// value : string
}
}
Vous pouvez toujours utiliser l'option de conversion. Tout d'abord, vous devez convertir votre objet en type "inconnu", puis le convertir en un type d'objet attendu.
let subID:number = 0;
subID = <number><unknown> await obj_s1aSite.submissionTableFirstID.getText();