TypeScript에서 문자열을 숫자로 변환하는 방법은 무엇입니까?


874

숫자의 문자열 표현이 주어지면 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"))will print string number.
k0pernikus

답변:


1379

JavaScript 에서 와 마찬가지로parseInt 또는 parseFloat함수를 사용하거나 단항 +연산자 를 사용할 수 있습니다.

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

언급 된 모든 기술은 올바른 타이핑을 가지며 간단한 10 진 정수 문자열을 올바르게 구문 분석 "123"하지만 예상되는 다양한 다른 경우 (예 "123.45":) 및 코너 경우 ( 예 :)에 대해 다르게 동작합니다 null.

변환 표이 답변 에서 가져온 표


236
작은 힌트 : parseInt (null)은 NaN을 반환하지만 + null은 0을 반환
Robin J

17
TypeScript 방식으로 수행하는 필립의 높은 답변만큼 표현 적이 지 않습니다.
Patrick

10
TypeScript는 JavaScript이기 때문에 TypeScript 방법이 없습니다.
dayturns

47
@thedayturns 프로그래밍은 전기이기 때문에 프로그래밍 방법이 없습니다
jiroch

1
@ 패트릭은 왜 일반 자바 스크립트이기 때문에 "TypeScript"방식이라고 부르는지 잘 모르겠습니다.
Sandy Gifford

1090

이 작업을 수행하는 Typescript 방법은 다음과 같습니다.

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

여기에 답변 된대로 : https : //.com/a/23440948/2083492


4
참고 :이 isNaN기능을 사용하여 NaN을 확인할 수 있습니다 .
Heinrich Ulbricht

2
이것은 작동하지 않습니다 : let value : number = valueAsString;
yonexbat 2016 년

1
나는 새로운 Number ( "1234"). valueOf ()가 실제로 우리가 찾고있는 것이라고 생각합니다
chrismarx

23
@Devid – 당신은 단순화 할 수 있습니다 let a = Number('x') || 0;– "falsey"를 Number('x')반환 NaN합니다. 따라서, a할당 될 것 0.틀림없이 많은 청소기와 (약간) 빠른 삼항 문을 사용하여 두 번 구문 분석하는 것보다.
Geoff James

4
@ Paul0515이 답변을 정답으로 업데이트 할 수 있습니까
Chris Lang

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

그래도 한 가지 더 언급하고 싶습니다 parseInt.

사용할 때는 항상 기수 매개 변수를 전달하는parseInt 것이 좋습니다 . 10 진수 변환의 경우는입니다 . 이것이 매개 변수의 기본값이므로 생략 할 있습니다. 이진수의 경우 a 와 16 진수입니다. 실제로 2와 36 사이의 기수가 작동합니다.10216

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

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

parseInt함수는 문자열을 구문 분석하여 숫자로 변환합니다. 일부 JS 구현에서 parseInt선행 0을 8 진으로 구문 분석합니다.

ECMAScript 3에서는 권장하지 않고 ECMAScript 5에서는 금지되어 있지만 많은 구현에서는 선행 0으로 시작하는 숫자 문자열을 8 진수로 해석합니다. 다음은 8 진수 결과이거나 10 진수 결과 일 수 있습니다. 신뢰할 수없는 동작을 피하려면 항상 기수를 지정하십시오.

MDN

코드가 더 명확해진다는 사실은 기수 매개 변수를 지정하면 좋은 부작용입니다.

이후 parseFloat기수 10에서는 숫자 표현식 만 구문 분석 기수 매개 변수는 필요하지 않습니다.

이것에 더 많은 것 :


그리고 하나 더 : ~~ '123'(사용하여 내부 ToInt32)
aMarCruz

@aMarCruz true, 그러나 이것이 의미 적으로 유용한 지 토론하겠습니다
Fabian Lauer

52

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 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 개의 인수를 취합니다. 첫 번째는 구문 분석 할 문자열입니다. 두 번째는 기수입니다 (예 : 10 진수의 경우 10, 이진수의 경우 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
}

2

var myNumber: number = 1200;
//convert to hexadecimal value
console.log(myNumber.toString(16)); //will return  4b0
//Other way of converting to hexadecimal
console.log(Math.abs(myNumber).toString(16)); //will return  4b0
//convert to decimal value
console.log(parseFloat(myNumber.toString()).toFixed(2)); //will return  1200.00

온라인 숫자 변환 도구

숫자 변환기


1

세 가지 방법이 있습니다

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

0

이온 프로그래밍 상황에서 데이터 유형을 변환하는 데 문제가있는 많은 사람들이 있습니다.이 언어는 새로운 언어이기 때문에 여기에서는 사용자가 데이터 이온 유형을 문자열 데이터로 변환하는 방법에 대한 지침을 자세히 설명합니다 정수를 입력하십시오.

java, php, c, c ++와 같은 프로그래밍 언어에서 ... 모두 데이터를 쉽게 이동할 수 있습니다. 이온에서 우리를 위해 데이터 변환도 만들 수 있습니다. 다른 프로그래밍 언어에서도 쉬운 방법입니다.

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. 문자열의 머리 나 꼬리에 하나의 부호 만 있는지 확인하는 검사를 수행합니다.
  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.