如何将字符串转换为数字

28

我无法弄清如何将这个字符串 82144251 转换为数字。

代码:

var num = "82144251";

如果我尝试下面的代码,.toFixed() 函数会将我的数字转换回字符串...

问题更新:我正在使用谷歌应用脚本编辑器,那可能就是问题所在...

num = parseInt(num).toFixed() // if I just do parseInt(num) it returns 8.2144251E7

5
.toFixed()函数实际上返回的是一个字符串,而不是一个数字。 - Pointy
2
请注意,8.2144251E782144251 完全相同。 - Pointy
3
@PavelValeriu 你为什么要调用 .toFixed()parseInt()返回一个数字,这就是你所需要的。 - Barmar
2
我很困惑为什么parseInt的结果不是你想要的。 - user47589
3
@PavelValeriu: 什么问题?"parseInt(num) 返回8.2144251E7"? - 不,它不会这样返回。 - georg
显示剩余11条评论
6个回答

35
你可以使用一元运算符'+'或parseInt(number,10)或Number()将字符串转换为数字。
检查这些代码片段:
var num1a = "1";
console.log(+num1a);

var num1b = "2";
num1b=+num1b;
console.log(num1b);


var num3 = "3"
console.log(parseInt(num3,10));


var num4 = "4";
console.log(Number(num4));

希望这能有所帮助


4
虽然+num可以将字符串转换为数字,但我个人不建议使用该方法。这种写法总是让人感觉加号是一个意外的遗留物。 - t.niese
...并且可能会导致与+=之间的混淆。 - Scott Marcus
1
@Scott Marcus。我并不认为+num有任何困惑。这是一种在较少代码的情况下改变类型的足够方式。 - Chris Haugen
它在这里可以工作,但请检查我的更新问题。谢谢! - Valip
@ChrisHaugen 我并没有说+num很难理解,我是说num=+num很容易和num+=num混淆。 - Scott Marcus

11

2
被广泛认为是一种不好的实践,使用Number()String()Boolean()构造函数。 - Scott Marcus
1
嘿,@ScottMarcus,感谢你提醒我。我们每天都会学到新东西 :) 你能帮我理解为什么吗? - Dave Cooper
@ScottMarcus,为什么Number()是不好的实践?parseIntNumber有不同的用途。如果我想要接受100px或类似的输入,则parseInt会很有用;如果我想确保字符串只包含数字(包括前导和尾随空格、e符号和十六进制),那么Number()将给出正确的结果。 - t.niese
@Dave Cooper 因为它们有点反模式。它们是构造函数,你不必使用 new,而我们有其他更直观的方法来完成这些工作。 - Scott Marcus
@ScottMarcus,你认为parseInt是一个更明智的解决方案?如果是这样,为什么? - Dave Cooper
2
@DaveCooper Number() 在幕后创建一个数字对象,而不仅仅是保持类型,这会产生更多的开销,并且很容易与 new Number() 混淆(具体取决于实现方式)。String()Boolean() 也是如此。 - Scott Marcus

5

没有愚蠢的问题。

快速回答:

要将字符串转换为数字,您可以使用一元加法运算符。

var num = "82144251";

num = +num;

num = +num 的作用与 num = num * 1; 实际上是一样的,它会把 a 中的值转换成数字,但在此之后并不会改变该值。


当字符串包含非数字字符时会发生什么? - Scott Marcus
它应该评估为NAN,然而,您的问题并没有指定它需要处理非数字。只是num = parseInt(num).toFixed()返回一个带有E的字符串。 - Chris Haugen

0

var num = "82144251";
num = parseInt(num).toFixed()
console.log(num, typeof num); // string
num = parseFloat(num);
console.log(num, typeof num); // number


好的,但结果是8.2144251E7而不是82144251 - Valip
@PavelValeriu 当我运行代码时,结果并不是这样的。你运行了代码片段吗? - Scott Marcus
这里可以运行,但请检查我的更新问题。谢谢! - Valip

0

var intNum = parseInt("82144251", 10); // intNum 是数字


-1

我使用num-0,因为它更容易进行内联使用。


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