Javascript:将字符串转换为数字?
Posted
技术标签:
【中文标题】Javascript:将字符串转换为数字?【英文标题】:Javascript: Converting String to Number? 【发布时间】:2010-05-16 13:25:22 【问题描述】:有什么方法可以将变量从字符串转换为数字?
例如,我有
var str = "1";
我可以改成
var str = 1;
【问题讨论】:
【参考方案1】:试试str = parseInt( str, 10 )
(注意:第二个参数表示解析的基数;在这种情况下,您的数字将被解析为小数)
话虽如此,“类型”一词在 javascript 中的使用非常松散。 你能解释一下为什么你完全关心变量的类型吗?
【讨论】:
谢谢,费奥多尔。我正在尝试使用正则表达式从字符串中提取数字,它返回一个字符串,所以我想将它转换为一个数字以便可以处理它。 不,基数不能省略,也没有默认值。如果您省略它,vm 将尝试猜测导致例如的基数。 010 不被解释为 10,而是被解释为 8。 @Warrantica:好的,这似乎是合法的。让我感到困惑的是“改变变量的类型”这句话。这不是人们通常想做的事情。对于您的问题,更正确的措辞是“如何将字符串转换为数字”? 我对基数进行了快速搜索。 “以 0 开头表示八进制”已被贬低,但如果它以“0x”开头,则解释为十六进制。 晚了大约十年,但是:使用parseFloat
而不是parseInt
。它们产生相同的Number
,但 parseFloat 将涵盖所有正常用例,而不需要基数,或者仅仅因为可能存在小数点而进行 if/then 检查。【参考方案2】:
有三种方法可以做到这一点:
str = parseInt(str, 10); // 10 as the radix sets parseInt to expect decimals
或
str = Number(str); // this does not support octals
或
str = +str; // the + operator causes the parser to convert using Number
明智地选择:)
【讨论】:
我之前的问题有误。 bclary.com/2004/11/07/#a-11.4.6 + 运算符不做它在其他语言中所做的事情 (foo > 0 ? foo : -foo;) @Consp... 我没关注你,有什么关系?但是对于您的示例代码,您需要使用 -- 或 ++str = new Number(str)
返回一个对象;那应该是str = Number(str)
。
另一种选择:val = str * 1;
【参考方案3】:
您有多种选择:
一元 +
运算符:value = +value
将使用 JavaScript 引擎的标准规则将字符串强制转换为数字。该数字可以有小数部分(例如,+"1.50"
是 1.5
)。字符串中的任何非数字(科学记数法的e
除外)都会产生NaN
的结果。另外,+""
是 0
,这可能不直观。
var num = +str;
Number
函数:value = Number(value)
。与+
做同样的事情。
var num = Number(str);
parseInt
函数,通常带有基数(数字基数):value = parseInt(value, 10)
。这里的缺点是parseInt
转换它在字符串开头找到的任何数字,但忽略 字符串后面的非数字,所以parseInt("100asdf", 10)
是100
,而不是NaN
。顾名思义,parseInt
只解析一个整数。
var num = parseInt(str, 10);
parseFloat
函数:value = parseFloat(value)
。允许小数值,并且始终以十进制工作(从不使用八进制或十六进制)。 parseInt
对字符串末尾的垃圾做同样的事情,parseFloat("123.34alksdjf")
是 123.34
。
var num = parseFloat(str);
因此,请选择适合您用例的工具。 :-)
【讨论】:
【参考方案4】:最好的办法:
var str = "1";
var num = +str; //simple enough and work with both int and float
您还可以:
var str = "1";
var num = Number(str); //without new. work with both int and float
或
var str = "1";
var num = parseInt(str,10); //for integer number
var num = parseFloat(str); //for float number
不要:
var str = "1";
var num = new Number(str); //num will be an object. typeof num == 'object'
parseInt 仅用于特殊情况,例如
var str = "ff";
var num = parseInt(str,16); //255
var str = "0xff";
var num = parseInt(str); //255
【讨论】:
以上是关于Javascript:将字符串转换为数字?的主要内容,如果未能解决你的问题,请参考以下文章