如何在JavaScript中将字符串转换为整数?


当前回答

您可以使用加号。例如:

var personAge = '24';
var personAge1 = (+personAge)

然后您可以看到新变量的typebytypeofpersonAge1;这是数字。

其他回答

请参见以下示例。这将有助于回答您的问题。

Example                  Result

parseInt("4")            4
parseInt("5aaa")         5
parseInt("4.33333")      4
parseInt("aaa");         NaN (means "Not a Number")

通过使用parsent函数,它将只提供整数运算,而不提供字符串。

在JavaScript中将字符串转换为数字有两种主要方法。一种方法是解析它,另一种方法则是将其类型更改为Number。其他答案中的所有技巧(例如,一元加号)都隐含地将字符串的类型强制为数字。您也可以使用Number函数显式地执行相同的操作。

正在分析

var parsed = parseInt("97", 10);

parseInt和parseFloat是用于将字符串解析为数字的两个函数。如果它碰到了一个无法识别的字符,解析将自动停止,这对于解析像“92px”这样的字符串很有用,但这也有点危险,因为它不会在错误输入时给你任何错误,相反,除非字符串以数字开头,否则你会得到NaN。忽略字符串开头的空白。下面是一个例子,说明它做了与您想要的不同的事情,并且没有给出任何出错的迹象:

var widgetsSold = parseInt("97,800", 10); // widgetsSold is now 97

最好总是将基数指定为第二个参数。在较旧的浏览器中,如果字符串以0开头,如果没有指定基数,它将被解释为八进制,这让很多人感到惊讶。如果未指定基数(例如0xff),则通过使字符串以0x开头来触发十六进制的行为。ECMAScript 5实际上改变了标准,因此,如果没有指定基数,现代浏览器在出现前导0时不再触发八进制。parseInt可以理解直到基36的基,在这种情况下,大写和小写字母都被视为等价的。

将字符串类型更改为数字

上面提到的所有其他不使用parseInt的技巧都涉及将字符串隐式强制转换为数字。我更喜欢明确地这样做,

var cast = Number("97");

这与解析方法的行为不同(尽管它仍然忽略空格)。它更严格:如果它不理解整个字符串,那么它将返回NaN,因此不能将其用于97px这样的字符串。由于您需要一个基本数而不是number包装器对象,请确保不要在number函数前面放置新的。

显然,转换为Number会给你一个可能是浮点数而不是整数的值,所以如果你想要一个整数,你需要修改它

var rounded = Math.floor(Number("97.654"));  // other options are Math.ceil, Math.round
var fixed = Number("97.654").toFixed(0); // rounded rather than truncated
var bitwised = Number("97.654")|0;  // do not use for large numbers

任何按位运算符(这里我做了一个按位或,但也可以像前面的答案或移位一样做双否定)都会将值转换为32位整数,其中大多数都会转换为有符号整数。请注意,这不会让您想要大整数。如果整数不能用32位表示,它将换行。

~~"3000000000.654" === -1294967296
// This is the same as
Number("3000000000.654")|0
"3000000000.654" >>> 0 === 3000000000 // unsigned right shift gives you an extra bit
"300000000000.654" >>> 0 === 3647256576 // but still fails with larger numbers

要正确处理较大的数字,应使用舍入方法

Math.floor("3000000000.654") === 3000000000
// This is the same as
Math.floor(Number("3000000000.654"))

请记住,强制理解指数表示法和无穷大,因此2e2是200而不是NaN,而解析方法则不是。

风俗

这两种方法都不太可能完全符合您的要求。例如,如果解析失败,通常我会希望抛出一个错误,并且我不需要对无限、指数或前导空格的支持。根据您的用例,有时编写自定义转换函数是有意义的。

始终检查Number或其中一个解析方法的输出是否为所需的数字类型。您几乎肯定希望使用isNaN来确保数字不是NaN(通常是发现解析失败的唯一方法)。

函数doSth(){var a=document.getElementById('input').value;document.getElementById('number').innerHTML=toNumber(a)+1;}函数toNumber(str){return+str;}<input id=“input”type=“text”><input onclick=“doSth()”type=“submit”><span id=“number”></span>

最简单的方法是使用本机Number函数:

var x = Number("1000")

如果这对你不起作用,那么有parseInt、一元加号、parseFloat with floor和Math.round方法。

parseInt()

var x = parseInt("1000", 10); // You want to use radix 10
    // So you get a decimal number even with a leading 0 and an old browser ([IE8, Firefox 20, Chrome 22 and older][1])

一元加

如果字符串已经是整数形式:

var x = +"1000";

地板()

如果字符串是或可能是浮点数,并且需要整数:

var x = Math.floor("1000.01"); // floor() automatically converts string to number

或者,如果您要多次使用Math.floor:

var floor = Math.floor;
var x = floor("1000.01");

parseFloat()

如果你是一个在调用parseInt时忘记输入基数的类型,你可以使用parseFloat并根据自己的喜好进行舍入。这里我用地板。

var floor = Math.floor;
var x = floor(parseFloat("1000.01"));

舍入()

有趣的是,Math.round(如Math.floor)将进行字符串到数字的转换,因此如果您希望数字四舍五入(或如果字符串中有整数),这是一个很好的方法,可能是我的最爱:

var round = Math.round;
var x = round("1000"); // Equivalent to round("1000", 0)

JavaScript中有许多方法可以将字符串转换为数值。。。所有这些都简单方便。选择适合您的方式:

var num = Number("999.5"); //999.5
var num = parseInt("999.5", 10); //999
var num = parseFloat("999.5"); //999.5
var num = +"999.5"; //999.5

此外,任何数学运算都会将它们转换为数字,例如。。。

var num = "999.5" / 1; //999.5
var num = "999.5" * 1; //999.5
var num = "999.5" - 1 + 1; //999.5
var num = "999.5" - 0; //999.5
var num = Math.floor("999.5"); //999
var num = ~~"999.5"; //999

我更喜欢的方式是使用+符号,这是在JavaScript中将字符串转换为数字的优雅方式。