TypeScriptで文字列を数値に変換する方法は?


876

数値の文字列表現が与えられた場合、numberTypeScriptで型に変換するにはどうすればよいですか?

var numberString: string = "1234";
var numberValue: number = /* what should I do with `numberString`? */;


2
それはタイプの種類を変更しない、コンパイラそれにトリックを@o_nix: console.log(typeof <number><any>"1", typeof Number("1"))印刷しますstring number
k0pernikus

回答:


1383

JavaScriptまったく同じようparseIntまたはparseFloat関数を使用するか、単項演算+子を使用することができます。

var x = "32";
var y: number = +x;

上記のすべての手法は正しいタイピングを持ち、のような単純な10進整数文字列を正しく解析しますが"123"、その他のさまざまな、予想されるケース(など"123.45")とコーナーケース(などnull)では動作が異なります。

換算表この回答 から取った表


237
小さなヒント:parseInt(null)はNaNを返しますが、+ nullは0を返します
Robin J

17
TypeScriptの方法でこれを行うフィリップのより高い評価の回答ほど表現力はありません。
Patrick

10
TypeScriptは単なるJavaScriptなので、TypeScriptの方法はありません。
thedayturns

47
@thedayturnsプログラミングは単なる電気なので、プログラミングの方法はありません
ジロッチ

1
@Patrickは、単純なJavascriptなので、なぜ「TypeScript」のように呼んでいるのかわからない...
Sandy Gifford

1092

Typescriptの方法は次のとおりです。

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

ここで回答:https : //stackoverflow.com/a/23440948/2083492


4
注:isNaN関数を使用してNaNをチェックできます。
ハインリッヒウルブリヒト2017年

2
これは機能しないことに注意してください。letvalue:number = valueAsString;
yonexbat

1
新しいNumber( "1234")。valueOf()は、私たち全員が本当に求めているものだと思います
chrismarx

23
@Devid-簡略化できますlet a = Number('x') || 0;- Number('x')を返しますがNaN、これは「false」です。したがって、3項ステートメントを使用して2回解析するよりもはるかにクリーンで、ほぼ間違いなく(わずかに)速くa割り当てられ0.ます。
Geoff James

4
Paul0515 @あなたは、これが正解であることを更新することができます
クリス・ラング

94

私たちの仲間のAngularユーザーの場合:

内のテンプレートNumber(x)およびparseInt(x)エラーをスローし、+x効果がありません。有効なキャストはx*1またはになりx/1ます。


それは素晴らしいです!HTMLで言ったように+ xは数値に変換されません
sa_

3
これNumberは、評価の範囲外であるためです。あなたはclass MyComponent { Number = Number; }それを使うために書くことができます。
Aluan Haddad

58

ここの他の回答で示されているように、変換を行う方法はいくつかあります。

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

もう1つ説明しておきparseIntます。

を使用する場合はparseInt常に基数パラメータを渡すことをお勧めします。10進変換の場合は、です10。これはパラメータのデフォルト値です。そのため、省略できます。2 進数の場合は、2および1616進数の場合です。実際には、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の数値表現を解析し、ここでの基数パラメータは必要ありません。

これについての詳細:


もう1つ:~~ '123'(内部ToInt32を使用)
aMarCruz

@aMarCruzは真実ですが、これが意味的に有用であるかどうかについては議論します
Fabian Lauer

52

TypeScriptはRyanの発言を詳しく説明し、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 Type Conversionの興味深い詳細のすべて。


22

次のいずれかの方法を実行できます。

var str = '54';

var num = +str; //easy way by using + operator
var num = parseInt(str); //by using the parseInt operation 

13

文字列から数値への変換:

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. ParseInt()文字列を整数に変換する場合に使用します。ただし、TSではすべての数値が浮動小数点値であるため、データ型は依然として浮動小数点です。。解析する数値の基数を指定する必要がある場合にも、このメソッドを使用します。
  2. ParseFloat()文字列を浮動小数点数に解析する必要がある場合に使用します。
  3. +文字列の前に演算子を使用して、それを浮動小数点数に強制変換できます。これの利点は、構文が非常に短いことです。

7

最も簡単な方法は、+ strValまたはNumber(strVal)を使用することです

例:

let strVal1 = "123.5"
let strVal2 = "One"
let val1a = +strVal1
let val1b = Number(strVal1)
let val1c = parseFloat(strVal1)
let val1d = parseInt(strVal1)
let val1e = +strVal1 - parseInt(strVal1)
let val2a = +strVal2

console.log("val1a->", val1a) // 123.5
console.log("val1b->", val1b) // 123.5
console.log("val1c->", val1c) // 123.5
console.log("val1d->", val1d) // 123
console.log("val1e->", val1e) // 0.5
console.log("val2a->", val2a) // NaN

2

そこのような作り付けの機能がありparseInt()parseFloat()そしてNumber()活字体で、あなたはそれらを使用することができます。


2

=> convertstring('10 .00 ')で関数を呼び出します

parseFloat(string)=> floatへの変換、toFixed(4)=>小数点以下の桁数への変換に使用できます

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

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



0

イオンプログラミングの状況では、データ型の変換で問題を解決するのが難しいという多くの問題があります。これはこの言語が新しいためです。ここで、ユーザーがデータイオン型を文字列データに変換する方法を知るための手順を詳しく説明します整数型。

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

this.mPosition = parseInt("");

0

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

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

0

次に、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

typescriptは、私たちvar aがエーテルになることを知る必要がありますNumber || String

export type StringOrNumber = number | string;

export function toString (v: StringOrNumber) {
 return `${v}`;
}


export function toNumber (v: StringOrNumber) {
 return Number(v);
}

export function toggle (v: StringOrNumber) {
 return typeof v === "number" ? `${v}` : Number(v);
}

-1

キャストオプションはいつでも使用できます。まず、オブジェクトを「不明な」タイプに変換してから、それを予期されたオブジェクトタイプにキャストする必要があります。

let subID:number = 0;

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

TypeScriptには型ヒントのみがあり、型キャストはありません。コンパイラーをだまして数値だと思わせ、実行時に解析しない限り、文字列のままです。
k0pernikus

console.log(typeof <number><unknown>"1", typeof Number("1"))印刷されますstring number
k0pernikus
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.