JavaScript:将字符串转换为数字?

17

有没有一种方法可以将字符串变量转换为数字?

例如,我有一个字符串:

var str = "1";

我能将它更改为什么?

var str = 1;
4个回答

26

针对整数,请尝试使用str = parseInt(str, 10)

注意:第二个参数表示解析的进制数;在这种情况下,您的数字将被解析为十进制)

parseFloat可用于浮点数。一元+是第三个选项:str = +str

然而,需要注意的是,在JavaScript中,“类型”这个术语使用得很宽泛。 您能否解释一下为什么您关心变量的类型?


谢谢,Fyodor。我正在尝试使用正则表达式从字符串中提取数字,并且它返回一个字符串,因此我想将其转换为数字以便进行处理。 - Warrantica
不,进制数不能省略,也没有默认值。如果你省略它,虚拟机将尝试猜测进制数,导致例如 010 被解释为 10 而不是 8。 - Sean Kinsey
@Warrantica:好的,那看起来很合理。让我困惑的是“更改变量类型”这个表达方式。通常情况下,人们不会想要这样做。你的问题更正确的表述应该是:“如何将字符串转换为数字”? - Fyodor Soikin
我对基数进行了快速搜索。 "以0开头表示八进制"已经过时,但如果以"0x"开头,则会被解释为十六进制。 - Warrantica
2
大约晚了十年,但是:使用parseFloat代替parseInt。它们产生相同的数字,但是parseFloat将覆盖所有正常用例,而不需要基数或if/then检查,只因为可能有一个小数点。 - Mike 'Pomax' Kamermans

16

有三种方法可以实现这个:

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

明智地选择 :)


我的上一个问题是错误的。http://bclary.com/2004/11/07/#a-11.4.6 在其他语言中,+运算符并不像它在其他语言中所做的那样(foo > 0 ? foo : -foo;)。 - Conspicuous Compiler
1
@Consp...我不明白你的意思,这和什么相关吗?但是对于你的示例代码,你需要使用--或++。 - Sean Kinsey
str = new Number(str) 返回一个对象;应该使用 str = Number(str) - Daniel Beck
另一个选项是:val = str * 1; - freedomn-m

14

您有几个选项:

  • 一元运算符+:使用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)。允许使用小数值,并且始终以十进制(而不是八进制或十六进制)进行计算。对于带有字符串结尾垃圾的内容,parseFloatparseInt所做的事情相同,例如parseFloat("123.34alksdjf")的结果为123.34

  • var num = parseFloat(str);
    

因此,选择适合您使用情况的工具即可。 :-)


这是更好的答案,因为它回答了问题,而且没有引出“你为什么要这样做”的团队。只是晚了8年。 - user3481644

5

最佳方式:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接