给定数字的字符串表示形式,如何将其转换为number
TypeScript类型?
var numberString: string = "1234";
var numberValue: number = /* what should I do with `numberString`? */;
console.log(typeof <number><any>"1", typeof Number("1"))
将print string number
。
给定数字的字符串表示形式,如何将其转换为number
TypeScript类型?
var numberString: string = "1234";
var numberValue: number = /* what should I do with `numberString`? */;
console.log(typeof <number><any>"1", typeof Number("1"))
将print string number
。
Answers:
就像 在JavaScript中一样,您可以使用parseInt
或parseFloat
函数,或者简单地使用一元运算+
符:
var x = "32";
var y: number = +x;
所有提到的技术都将具有正确的类型,并且将正确地解析简单的十进制整数字符串(例如)"123"
,但是对于其他各种可能的预期情况(例如"123.45"
)和边角情况(例如null
),其行为将有所不同。
该答案 表
使用Typescript的方法是:
Number('1234') // 1234
Number('9BX9') // NaN
isNaN
功能检查NaN 。
let a = Number('x') || 0;
- Number('x')
将返回NaN
“ falsey”。因此,与使用三元语句并解析两次相比,a
将被分配的0.
更加干净,并且可以说(稍微)更快。
对于我们的其他Angular用户:
在模板内,Number(x)
并parseInt(x)
引发错误,并且+x
无效。有效的转换将为x*1
或x/1
。
Number
不在评估范围内。您可以编写class MyComponent { Number = Number; }
使用它。
如此处其他答案所示,有多种执行转换的方法:
Number('123');
+'123';
parseInt('123');
parseFloat('123.45')
我想再提一件事parseInt
。
使用时parseInt
,始终传递基数参数是有意义的。对于十进制转换,即10
。这是参数的默认值,这就是为什么可以省略它的原因。对于二进制,它是一个2
,16
对于十六进制。实际上,介于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中的数字表达式,因此此处不需要基数参数。
有关此的更多信息:
在解释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上所有有趣的深入细节。
在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);
ParseInt()
当你想要一个字符串转换为整数。但是,数据类型仍然是浮点数,因为所有数字值都是TS中的浮点值。当您需要指定要解析的数字的基数时,也请使用此方法。ParseFloat()
时,你需要一个字符串解析为一个浮点数。+
在字符串前使用运算符将其强制为浮点数。这样做的好处是语法非常短。最简单的方法是使用+ 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
用=> convertstring('10 .00')调用函数
parseFloat(string)=>可用于转换为float,toFixed(4)=>转换为小数位数
parseInt(str)=>可用于转换为整数
convertstring(string){
let number_parsed: any = parseFloat(string).toFixed(4)
return number_parsed
}
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
有三种方法
let a = + '12';
let b = parseInt('12' , 10); // 10 means decimal number
let c = Number('12');
这是StrToNumber函数的修改版本。像以前一样,
这种回答是一种可能的解决方案,比我以前的帖子更适合最初的问题。
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 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);
}
您始终可以使用强制转换选项。首先,必须将对象转换为“未知”类型,然后将其转换为预期的对象类型。
let subID:number = 0;
subID = <number><unknown> await obj_s1aSite.submissionTableFirstID.getText();
console.log(typeof <number><unknown>"1", typeof Number("1"))
将打印string number
。