ChatGPT解决这个技术问题 Extra ChatGPT

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

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

var numberString: string = "1234";
var numberValue: number = /* what should I do with `numberString`? */;
@o_nix 它欺骗编译器,它不会改变类型类型:console.log(typeof <number><any>"1", typeof Number("1")) 将打印 string number

T
Thanatos

Exactly like in JavaScript,您可以使用 parseIntparseFloat 函数,或者简单地使用一元 + 运算符:

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

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

https://i.stack.imgur.com/QNMfI.png


小提示:parseInt(null) 返回 NaN 但 +null 返回 0
不像 Philip 在此处以 TypeScript 方式执行此操作的评价更高的答案那样富有表现力。
没有 TypeScript 方式,因为 TypeScript 只是 JavaScript。
@thedayturns 没有编程方式,因为编程只是电力
@Patrick 不确定您为什么将其称为“TypeScript”方式,因为它也只是普通的 Javascript ......
C
Community

执行此操作的 Typescript 方法是:

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

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


注意:您可以使用 isNaN 函数检查 NaN。
请注意,这不起作用:let value : number = valueAsString;
我认为 new Number("1234").valueOf() 确实是我们都在寻找的-
@Devid - 您可以简化为 let a = Number('x') || 0; - Number('x') 将返回 NaN,即“错误”。因此,a 将被分配 0. 比使用三元语句和两次解析要干净得多,并且可以说(稍微)快得多。
小提示:不要使用 new Number(),因为它会产生类型 Number 而不是 number。使用Number()
p
phil294

对于我们的 Angular 用户:

模板 中,Number(x)parseInt(x) 会引发错误,而 +x 无效。有效的强制转换为 x*1x/1


那好极了!正如您在 HTML +x 中所说,根本不会转换为数字
这是因为 Number 不在评估范围内。您可以编写 class MyComponent { Number = Number; } 来使用它。
F
Fabian Lauer

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

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

不过,我想在 parseInt 上再提一件事。

使用 parseInt 时,总是传递 radix 参数是有意义的。对于十进制转换,即 10。这是参数的默认值,这就是它可以被省略的原因。对于二进制,它是一个 216 十六进制。实际上,任何介于 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 不鼓励并且 ECMAScript 5 禁止,但许多实现将以前导 0 开头的数字字符串解释为八进制。以下可能有八进制结果,也可能有十进制结果。始终指定一个基数以避免这种不可靠的行为。 — MDN

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

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

更多关于这个:

为什么我们需要使用基数? (所以问题)

所以回答“parseInt() 和 Number() 有什么区别?”


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

在阐述 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 中的所有有趣的深入细节。


M
Manfred

字符串到数字的转换:

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

parseInt():这个函数有 2 个参数,第一个是要解析的字符串。第二个是基数(数学数字系统中的基数,例如十进制为 10,二进制为 2)。然后返回整数,如果第一个字符不能转换为数字,则返回 NaN。

parseFloat():将我们要解析的值作为参数,并返回一个浮点数。如果该值无法转换为数字,则返回 NaN。

+ 运算符:适当使用的运算符可以将字符串值强制转换为数字。

例子:

/* parseInt */ // 注意返回的是一个整数,所以会对数字进行四舍五入 console.log(parseInt('51.023124')); // parseInt 将“切断”字符串中不是数字的任何部分 console.log(parseInt('5adfe1234')); // 当字符串以非数字 NaN 开头时返回 console.log(parseInt('z123')); console.log('--------'); /* parseFloat */ // 将字符串解析为数字并保持数字的精度 console.log(typeof parseFloat('1.12321423')); // parseFloat 将“切断”字符串中不是数字的任何部分 console.log(parseFloat('5.5abc')); console.log('--------'); /* + 运算符 */ let myString = '12345' console.log(typeof +myString); let myOtherString = '10ab' // + 运算符不会切断任何“非数字”字符串部分,并将返回 NaN console.log(+myOtherString);

使用哪个?

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


很好的解释。对我帮助很大,先生!
L
Labib Hussain

您可以按照以下任一方式进行操作。

var str = '54';

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

2
2pichar

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

例子:

让 strVal1 = "123.5" 让 strVal2 = "一" 让 val1a = +strVal1 让 val1b = Number(strVal1) 让 val1c = parseFloat(strVal1) 让 val1d = parseInt(strVal1) 让 val1e = +strVal1 - parseInt(strVal1) 让 val2a = +strVal2 console.log("val1a->", val1a) // 123.5 console.log("val1b->", val1b) // 123.5 console.log("val1c->", val1c) // 123.5 控制台。 log("val1d->", val1d) // 123 console.log("val1e->", val1e) // 0.5 console.log("val2a->", val2a) // NaN


s
sqluser

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


K
Kanish Mathew

使用 => convertstring('10.00') 调用函数

parseFloat(string) => 可以用来转换成浮点数,toFixed(4) => 转换成多少小数

parseInt(str) => 可以用来转换成整数

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

s
sneha rani

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

Online Number Conversion Tool

Number Converter


N
Naveed Ullah

有三种方式

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

E
Ernesto

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


c
cancerbero

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

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

T
Tienanhvn

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

在java、php、c、c++等编程语言中...都可以轻松移动数据,那么在ionic中也可以为我们创建数据转换也是一种简单的方法,尤其是在其他编程语言中。

this.mPosition = parseInt("");

J
James W Simms

这是 StrToNumber 函数的修改版本。和以前一样,

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

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

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


X
XDavidT

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

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

这不会转换值,它会告诉计算机-> 闭嘴,我知道发生了什么,这是一个数字,相信我。但这绝对没有真正的转换。它在某些情况下可能会起作用,因为有很多地方可以放置字符串而不是数字,并且字符串将隐式转换为数字。但它并不总是有效。