web-dev-qa-db-ja.com

TypeScript文字列を数値に変換する

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

更新日:私は私が思いついた最高のソファー、私はいくつかの余分な不可解なことをしました:

文字列が数値であるかどうかのチェックはここで答えられます: TypeScriptでは、文字列が数値であるかどうかをチェックする方法 .

558
Paul0515

parseIntまたはparseFloat関数を使用することも、単項+演算子を使用することもできます。

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

これを行うTypeScriptの方法は次のとおりです。

Number('1234') // 1234
Number('9BX9') // NaN

ここに答えとして: https://stackoverflow.com/a/23440948/2083492

807
Philip Miglinci

私たちの同僚Angularユーザーへ:

template 内では、Number(x)parseInt(x)はエラーをスローし、+xは効果がありません。有効なキャストはx*1またはx/1です。

72
Blauhirn

Ryanが言ったことを詳しく説明すると、TypeScriptはJavaScriptの慣用句を一般に含んでいます。

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()

JavaScriptの型変換 には、興味深い詳細な情報がすべて含まれています。

43
user2040786

ここに他の答えによって示されるように、変換をする複数の方法があります:

Number('123');
+'123';
parseInt('123');
parseFloat('123.45')

parseIntについてもう一つ言及したいと思います。

parseIntを使用するときは、常に基数parameterを渡します。これは10です。これがパラメーターのデフォルト値なので、canは省略できます。バイナリ、16進数の場合は2および16で、実際には2から36までの任意の基数で動作します。

parseInt('123')         // 123 (don't do this)
parseInt('123', 10)     // 123 (much better)

parseInt('1101', 2)     // 13
parseInt('0xfae3', 16)  // 64227

parseInt関数は、文字列を解析してそれらを数値に変換します。一部のJS実装では、parseIntは先頭のゼロを8進数として解析します。

ECMAScript 3では推奨されず、ECMAScript 5では禁止されていますが、多くの実装では、先頭の0から始まる数値文字列を8進数として解釈します。次の結果は8進数の結果になることも、10進数の結果になることもあります。 この信頼できない動作を避けるために、常に基数を指定してください。

- _ mdn _

コードが明確になるという事実は、基数パラメータを指定した場合のいい副作用です。

parseFloatは基数10では数値式のみを解析するため、ここでは基数パラメーターは必要ありません。

これの詳細:

36
Fabian Lauer

次のいずれかの方法に従うことができます。

var str = '54';

var num = +str; //easy way by using + operator
var num = parseInt(str); //by using the parseInt operation 
15
Labib Hus'sain

数への変換文字列:

TypeScriptでは、次のようにして文字列を数値に変換します。

  • ParseInt():この関数は2つの引数を取ります。最初の引数は解析する文字列です。 2番目は基数です(10進数の場合は10、2進数の場合は2)。その後、整数を返します。最初の文字を数値に変換できない場合はNaNが返されます。
  • ParseFloat():引数として解析したい値を取り、浮動小数点数を返します。値を数値に変換できない場合は、NaNが返されます。
  • +演算子:演算子を適切に使用すると、文字列値を数値に変換できます。

例:

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

どちらを使用するには?

  1. 文字列をintegerに変換したいときはParseInt()を使います。ただし、すべての数値はTSの浮動小数点値なので、データ型はまだfloatです。解析したい数値の基数を指定する必要がある場合にもこのメソッドを使用してください。
  2. 文字列を浮動小数点数に解析する必要がある場合は、ParseFloat()を使用してください。
  3. 文字列の前に+演算子を使用して、それを浮動小数点数に変換することができます。これの利点は、構文が非常に短いということです。
6

TypeScriptにはparseInt()parseFloat()Number()のような組み込み関数がありますので、それを使うことができます。

2
Mighty God Loki

=> convertstring('10 .00 ')を指定して関数を呼び出します。

parseFloat(string)=> float、toFixed(4)=>に変換するのに使用できます。

parseInt(str)=>整数に変換するために使用できます

convertstring(string){
    let number_parsed: any = parseFloat(string).toFixed(4)
    return number_parsed
}
1
Kanish Mathew

3つの方法があります

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

ionicプログラミングの状況では、データ型を変換するのが難しい問題を抱えている人がたくさんいます。この言語は新しいため、ここでユーザーに変換方法を知るための手順を詳しく説明します。 data ionic types to string data type integer。

Java、php、c、c ++などのプログラミング言語では、すべてがデータを簡単に移動でき、ionicでもデータ変換を作成できます。他のプログラミング言語でも特に簡単です。

this.mPosition = parseInt("");
0
Tienanhvn

以下は、StrToNumber関数の修正バージョンです。従来通り、

  1. 数値の前後にオプションの記号を表示できます。
  2. 文字列の先頭または末尾に記号が1つしかないことを確認するチェックを実行します。
  3. エラーが発生した場合、「合格した」デフォルト値が返されます。

この回答は、以前の投稿よりも最初の質問に適した解決策です。

   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

他の人が言ったように、型だけについて話している場合、parseInt()などは正しい型を返します。また、何らかの理由で値が数値または文字列の両方であり、parseInt()を呼び出したくない場合、typeof式も正しい型にキャストされます。

function f(value:number|string){
  if(typeof value==='number'){
   // value : number
  }else {
   // value : string
  }
}
0
cancerbero

キャストオプションはいつでも使用できます。まず、オブジェクトを「未知の」型に変換してから、それを予想されるオブジェクト型にキャストする必要があります。

let subID:number = 0;

subID = <number><unknown> await obj_s1aSite.submissionTableFirstID.getText();
0
Gaj Julije