如何在TypeScript中将字符串转换为数字?


873

给定数字的字符串表示形式,如何将其转换为numberTypeScript类型?

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


2
@o_nix欺骗了编译器,它不更改type type: console.log(typeof <number><any>"1", typeof Number("1"))将print string number
k0pernikus

Answers:


1374

就像 在JavaScript中一样,您可以使用parseIntparseFloat函数,或者简单地使用一元运算+符:

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

所有提到的技术都将具有正确的类型,并且将正确地解析简单的十进制整数字符串(例如)"123",但是对于其他各种可能的预期情况(例如"123.45")和边角情况(例如null),其行为将有所不同。

换算表该答案


236
小提示:parseInt(null)返回NaN,但+ null返回0
Robin J

17
不像Philip在这里以TypeScript方式给出的更高答案那样富有表现力。
Patrick

10
没有TypeScript方法,因为TypeScript只是JavaScript。
dayturns

46
@thedayturns没有编程方法,因为编程只是电力
jiroch

1
@Patrick不知道为什么要使用“ TypeScript”方式,因为它也只是普通的Javascript ...
Sandy Gifford

1088

使用Typescript的方法是:

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

如这里回答:https//stackoverflow.com/a/23440948/2083492


4
注意:您可以使用该isNaN功能检查NaN 。
海因里希·乌尔布里希特

2
请注意,这是行不通的:let value:number = valueAsString;
yonexbat

1
我认为新的Number(“ 1234”)。valueOf()确实是我们都在寻找的
东西-chrismarx

23
@Devid-您可以简化为let a = Number('x') || 0;- Number('x')将返回NaN“ falsey”。因此,与使用三元语句并解析两次相比,a将被分配的0.更加干净,并且可以说(稍微)更快。
杰夫·詹姆斯

4
@ Paul0515您能否将其更新为正确答案
克里斯·朗

94

对于我们的其他Angular用户:

模板内Number(x)parseInt(x)引发错误,并且+x无效。有效的转换将为x*1x/1


那好极了!正如您在HTML + x中所说的,根本不会转换为数字
sa_

3
那是因为Number不在评估范围内。您可以编写class MyComponent { Number = Number; }使用它。
Aluan Haddad

58

如此处其他答案所示,有多种执行转换的方法:

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

我想再提一件事parseInt

使用时parseInt始终传递基数参数是有意义的。对于十进制转换,即10。这是参数的默认值,这就是为什么可以省略它的原因。对于二进制,它是一个216对于十六进制。实际上,介于2和36之间(包括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将前导零解析为八进制:

尽管ECMAScript 3不建议使用ECMAScript 5禁止,但许多实现将以0开头的数字字符串解释为八进制。以下内容可能具有八进制结果,也可能具有十进制结果。始终指定一个基数,以避免这种不可靠的行为。

- MDN

代码变得更清晰的事实是指定基数参数的一个很好的副作用。

以来 parseFloat仅解析基数10中的数字表达式,因此此处不需要基数参数。

有关此的更多信息:


还有一个:~~'123'(使用内部ToInt32)
aMarCruz

@aMarCruz是的,但我会争论这是否在语义上有用
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代表十进制,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

用=> 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 ++等编程语言中,所有这些都可以轻松移动数据,然后在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. 它执行检查以验证字符串的头部或尾部只有一个符号。
  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

打字稿需要知道我们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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.