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:将字符串转换为数字?的主要内容,如果未能解决你的问题,请参考以下文章

javascript字符串的转换

javascript 怎么将字符串转换为ArrayBuffer

js字符串每个数组前面数字转换为多少个数组

字符串转数字

javascript 字符串怎么转成数字类型

javascript 隐性类型转换步骤