web-dev-qa-db-fra.com

TypeScript Conversion d'une chaîne en un nombre

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 .

487
Paul0515

Vous pouvez utiliser les fonctions parseInt ou parseFloat ou simplement utiliser l'opérateur unaire +:

var x = "32";
var y = +x; // y: number
721
Ryan Cavanaugh

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

757
Philip Miglinci

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.

68
Blauhirn

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 .

42
user2040786

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:

28
Fabian Lauer

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 
15
Labib Hus'sain

Conversion de chaîne en nombre:

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é.
  • Opérateur +: Lorsqu'il est utilisé correctement, l'opérateur peut contraindre une valeur de chaîne en un nombre.

Exemples:

/*    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);

Lequel utiliser?

  1. Utilisez 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.
  2. Utilisez ParseFloat() lorsque vous devez analyser une chaîne dans un nombre à virgule flottante.
  3. Vous pouvez utiliser l'opérateur + avant une chaîne pour la contraindre à un nombre à virgule flottante. L'avantage de ceci est que la syntaxe est très courte.
3

Il existe des fonctions intégrées telles que parseInt(), parseFloat() et Number() dans TypeScript, vous pouvez les utiliser.

2
Mighty God Loki

Il y a trois façons

 let a = + '12'; 
 let b = parseInt('12' , 10); // 10 means decimal number
 let c = Number('12');
0
Naveed Ullah

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("");
0
Tienanhvn

Voici une version modifiée de la fonction StrToNumber. Comme avant,

  1. Il permet à un signe facultatif d’apparaître devant ou derrière la valeur numérique.
  2. Il effectue une vérification pour vérifier qu'il n'y a qu'un seul signe en tête ou en fin de chaîne.
  3. Si une erreur se produit, une valeur par défaut "transmis" est renvoyée.

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);    
   }
0
James W Simms

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
}
0
Kanish Mathew

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
  }
}
0
cancerbero

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();
0
Gaj Julije