给定一个数字的字符串表示,如何在TypeScript中将其转换为数字类型?

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

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

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

所有提到的技术都将具有正确的类型,并将正确解析简单的十进制整数字符串(如“123”),但对于其他可能的情况(如“123.45”)和角点情况(如null),它们的行为会有所不同。

此答案中的表格


在解释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类型转换中所有有趣的深入细节。


打字方式如下:

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

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


对于我们的其他Angular用户:

在模板中,Number(x)和parseInt(x)抛出错误,+x无效。有效铸件为x*1或x/1。


Typescript中有parseInt()、parseFloat()和Number()等内置函数,您可以使用它们。


如这里的其他答案所示,有多种方法进行转换:

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

不过,我想再提一件关于parseInt的事情。

使用parseInt时,始终传递基数参数是有意义的。对于十进制转换,即10。这是参数的默认值,因此可以省略它。对于二进制,它是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

在一些JS实现中,parseInt将前导零解析为八进制:

尽管ECMAScript 3不鼓励使用ECMAScript5,但许多实现将以前导0开头的数字字符串解释为八进制。以下内容可能有八进制结果,也可能有十进制结果。始终指定基数以避免这种不可靠的行为。-多目标网络

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

因为parseFloat只解析基数为10的数字表达式,所以这里不需要基数参数。

更多信息:

为什么我们需要使用基数?(SO问题)所以回答“parseInt()和Number()之间的区别是什么?”


您可以遵循以下任一方式。

var str = '54';

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

字符串到数字的转换:

在Typescript中,我们通过以下方式将字符串转换为数字:

parseInt():此函数接受两个参数,第一个是要解析的字符串。第二个是基数(数学数字系统中的基数,例如十进制为10,二进制为2)。然后返回整数,如果第一个字符不能转换为数字,则返回NaN。parseFloat():将要解析的值作为参数,并返回一个浮点数。如果无法将值转换为数字,则返回NaN。+运算符:适当使用该运算符时,可以将字符串值强制转换为数字。

示例:

/*解析Int*///请注意,返回的是一个整数,因此它将舍入该数字console.log(parseInt('51.023124'));//parseInt将“截断”字符串中非数字的任何部分console.log(parseInt('5afe1234'));//当字符串以非数字NaN开头时,返回console.log(parseInt('z123'));console.log('--------');/*parseFloat*///将字符串解析为数字并保持数字的精度console.log(parseFloat类型('1.12321423'));//parseFloat将“截断”字符串中非数字的任何部分console.log(parseFloat('5.5abc'));console.log('--------');/*+运算符*/让myString='12345'console.log(typeof+myString);让myOtherString='10ab'//+运算符不会截断任何“非数字”字符串部分,并返回NaNconsole.log(+myOtherString);

使用哪种?

如果要将字符串转换为整数,请使用parseInt()。但是,数据类型仍然是浮点数,因为TS中的所有数值都是浮点值。当需要指定要解析的数字的基数时,也可以使用此方法。当需要将字符串解析为浮点数时,请使用parseFloat()。可以在字符串之前使用+运算符将其强制转换为浮点数。这样做的优点是语法非常简短。


使用=>convertstring(“10.00”)调用函数

parseFloat(string)=>可用于转换为float,toFixed(4)=>小数位数

parseInt(str)=>可用于转换为整数

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

有很多人在转换数据类型时遇到了问题。在离子编程的情况下,转换数据类型很难解决,因为这种语言是新的,这里我将详细说明用户如何将数据离子类型转换为字符串数据类型整数。

在诸如java、php、c、c++等编程语言中。。。所有这些都可以轻松地移动数据,然后在ionic中也可以为我们创建数据转换,这也是一种简单的方式,尤其是在其他编程语言中。

this.mPosition = parseInt("");

有三种方法

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

如果你只是在谈论类型,就像其他人所说的那样,parseInt()等将返回正确的类型。此外,如果由于任何原因,该值可能是数字或字符串,并且您不想调用parseInt(),则typeof表达式也将强制转换为正确的类型:

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

这里是StrToNumber函数的修改版本。如前所述,

它允许在数值前面或后面出现可选符号。它执行检查以验证字符串的头部或尾部只有一个符号。如果发生错误,将返回“传递”的默认值。

这是一个可能的解决方案,比我之前的帖子更适合最初的问题。

静态StrToNumber(val:string,defaultVal:number=0):数字{ let result:number=defaultVal;如果(val==空)返回结果;如果(val.length==0)返回结果;val=值trim();如果(val.length==0)返回(结果);让符号:数字=1;//// . 从字符串中获取符号,并将结果放在“符号”局部变量中。符号自然默认为正值//1表示阳性,-1表示阴性。// . 从值中删除符号字符。//注意,在函数返回之前,结果乘以符号局部变量以反映符号。// . 多个符号字符的错误检查// . 错误检查以确保符号字符位于字符串的开头或结尾// { 让positiveSignIndex=val.indexOf('+');让negativeSignIndex=val.indexOf('-');设nTailIndex=val.length-1;////确保字符串中没有正负号//如果((正SignIndex!=-1)&&(负SignIndex!=-1))返回结果;////手柄阳性标志//if(positiveSignIndex!=-1){////确保只有一个符号字符//if((positiveSignIndex!=val.lastIndexOf('+')))返回结果;////确保标志在头部或尾部//if((positiveSignIndex>0)&&(positiveSignIndex<nTailIndex))返回结果;////从字符串中删除符号//val=val.replace(“+”,“”).trim();} ////手柄负号//if(negativeSignIndex!=-1){////确保只有一个符号字符//if((negativeSignIndex!=val.lastIndexOf('-')))返回结果;////确保标志在头部或尾部//if((negativeSignIndex>0)&&(negative SignIndex<nTailIndex))返回结果;////从字符串中删除符号//val=val.replace(“-”,“”).trim();符号=-1;} ////确保文本长度大于0// 如果(val.length==0)返回结果;} ////将字符串转换为数字//var r=+(<any>val);如果((r!=null)&&(!isNaN(r))){ 结果=r*符号;}返回(结果);}


常量myNumber=1200;//转换为十六进制值console.log(myNumber.toString(16))//将返回4b0//其他转换为十六进制的方法console.log(Math.abs(myNumber).toString(16))//将返回4b0//转换为十进制值console.log(parseFloat(myNumber.toString()).toFixed(2))//将返回1200.00

用于将其他格式转换为十进制的参考

二进制到十进制十六进制到十进制数字转换器


最简单的方法是使用+strVal或Number(strVal)

示例:让strVal1=“123.5”让strVal2=“一”设val1a=+strVal1设val1b=数字(strVal1)let val1c=parseFloat(strVal1)let val1d=parseInt(strVal1)让val1e=+strVal1-parseInt(strVal1)设val2a=+strVal2console.log(“val1a->”,val1a)//123.5console.log(“val1b->”,val1b)//123.5console.log(“val1c->”,val1c)//123.5console.log(“val1d->”,val1d)//123console.log(“val1e->”,val1e)//0.5console.log(“val2a->”,val2a)//NaN


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


在最新版本中,您可以使用,例如:

var numberString: string = "1234";
const numberValue = numberString as number;