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

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

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

完全像在javascript,您可以使用#0#1函数,或者简单地使用一元+运算符:

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

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

转换表表取自这个答案

在解释Ryan所说的内容时,TypeScript通常包含JavaScript习语。

var n = +"1"; // the unary + converts to numbervar b = !!"2"; // the !! converts truthy to true, and falsy to falsevar s = ""+3; // the ""+ converts to string via toString()

JavaScript类型转换中所有有趣的深入细节。

这样做的TypeScript方法是:

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

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

对于我们的Angular用户:

模板中,Number(x)parseInt(x)抛出错误,+x没有影响。有效的转换将是x*1x/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)     // 13parseInt('0xfae3', 16)  // 64227

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

尽管ECMAScript 3不鼓励并且ECMAScript 5禁止,但许多实现将以前导0开头的数字字符串解释为八进制。以下可能有八进制结果,也可能有十进制结果。始终指定基数以避免这种不可靠的行为。

-MDN

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

由于parseFloat仅解析基数10中的数字表达式,因此这里不需要基数参数。

更多关于这个:

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

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

字符串到数字的转换:

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

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

示例:

/*    parseInt   */
// note that a whole number is returned, so it will round the numberconsole.log(parseInt('51.023124'));
// parseInt will 'cut off' any part of the string which is not a numberconsole.log(parseInt('5adfe1234'));
// When the string starts with non number NaN is returnedconsole.log(parseInt('z123'));
console.log('--------');
/*    parseFloat   */
// parses the string into a number and keeping the precision of the numberconsole.log(typeof parseFloat('1.12321423'));
// parseFloat will 'cut off' any part of the string which is not a numberconsole.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 NaNconsole.log(+myOtherString);

用哪个?

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

使用=>转换字符串('10.00')调用函数

parseFloat(string)=>它可用于转换为浮点数,to固定(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 numberlet c = Number('12');

如果你只是在谈论类型,正如其他人所说,parseInt()etc将返回正确的类型。此外,如果出于任何原因,值可以是数字或字符串,并且你不想调用parseInt(),typeof表达式也将转换为正确的类型:

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

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

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

在线号码转换工具

数字转换器

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

例子:

let strVal1 = "123.5"let strVal2 = "One"let val1a = +strVal1let val1b = Number(strVal1)let val1c = parseFloat(strVal1)let val1d = parseInt(strVal1)let val1e = +strVal1 - parseInt(strVal1)let val2a = +strVal2
console.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);}

在最新版本中,您可以使用as,以下是示例:

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

示例:-

     public depId!: number;this.activeRoute.paramMap.subscribe((params: ParamMap) => {let id = Number(params.get('id'));this.depId = id;console.log(typeof (id));})