如何在JavaScript中将string转换为整数?

如何在JavaScript中将string转换为integer

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

 var x = Number("1000") 

如果这不适合你,那么有parseIntunary plusparseFloat和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]) 

一元加号,如果你的string已经是一个整数的forms:

 var x = +"1000"; 

如果你的string是或可能是一个浮点数,你想要一个整数:

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

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

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

如果您是在调用parseInt时忘记放入小数的types,则可以使用parseFloat并围绕它进行调整。 我在这里使用地板。

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

有趣的是,Math.round(就像Math.floor)会进行string到数字的转换,所以如果你想让数字四舍五入(或者如果你有一个string中的整数),这是一个很好的方式,也许我最喜欢的:

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

试试parseInt函数:

 var number = parseInt("10"); 

但是有一个问题。 如果您尝试使用parseInt函数转换“010”,它将检测为八进制数,并返回数字8.因此,您需要指定一个基数(从2到36)。 在这种情况下,基地10。

 parseInt(string, radix) 

例:

 var result = parseInt("010", 10) == 10; // Returns true var result = parseInt("010") == 10; // Returns false 

有两种主要的方法可以将string转换为javascript中的数字。 一种方法是parsing它,另一种方法是将其types更改为一个数字。 其他答案中的所有技巧(例如,一元加)涉及将string的types隐式强制为数字。 您也可以使用Number函数明确地做同样的事情。

parsing

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

parseInt和parseFloat是用于将stringparsing为数字的两个函数。 parsing会停下来,如果它击中了一个它不认识的字符,这可能是有用的parsing像“92px”string,但它也有点危险,因为它不会给你任何错误input错误,而不是除非string以数字开始,否则将返回NaN。 string开头的空格被忽略。 下面是一个例子,它做了一些与你想要的不同的东西,并没有指出什么地方出了问题:

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

始终将基数指定为第二个参数是一个很好的做法。 在较老的浏览器中,如果string以0开始,那么如果没有指定基数会让很多人感到意外,则它将被解释为八进制。 如果没有指定基数(例如0xff ,则以hex的string开始,从而触发hex行为。 这个标准实际上是用ecmascript 5改变的,所以如果没有指定基数,那么现代浏览器不会再触发八进制。 parseInt理解基数为36,在这种情况下,大写和小写字母都被视为等同。

将string的types更改为数字

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

 var cast = Number("97"); 

这与parsing方法有不同的行为(虽然它仍然忽略空格)。 这是更严格的:如果它不理解整个string比返回NaN ,所以你不能使用它像97pxstring。 既然你想要一个原始数字而不是一个数字包装器对象,确保你不把new的数字函数的前面。

显然,转换为一个数字给你一个值可能是一个浮点数,而不是一个整数,所以如果你想要一个整数,你需要修改它。 有几种方法可以做到这一点:

 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")) 

请记住,所有这些方法都理解指数符号,所以2e2200而不是NaN。 另外,Number理解“Infinity”,而parsing方法不理解。

习惯

这些方法中的任何一个都不太可能完全按照你的意思去做。 例如,通常我会想要parsing失败时抛出一个错误,我不需要支持无穷大,指数或领先的空白。 根据你的用例,有时编写一个自定义的转换函数是有意义的。

总是检查Number或其中一个parsing方法的输出是您所期望的数字。 你几乎可以肯定地想用isNaN来确保这个数字不是NaN(通常是你发现parsing失败的唯一方法)。

ParseInt()和+是不同的

 parseInt("10.3456") // returns 10 +"10.3456" // returns 10.3456 

虽然是一个老问题,但也许这可能对某人有帮助。

我使用这种方式将string转换为int数字

 var str = "25"; // string var number = str*1; // number 

所以,乘以1时,值不会改变,但js会自动返回一个数字。

但是,如下所示,如果您确定str是一个数字(或者可以表示为数字),则应该使用它,否则将返回NaN – 不是数字。

你可以创build简单的函数来使用,例如

 function toNumber(str) { return str*1; } 

在这里输入图像描述

尝试parseInt。

 var number = parseInt("10", 10); //number will have value of 10. 

我在这里贴错了答案,对不起。 固定。

这是一个古老的问题,但我喜欢这个把戏:

 ~~"2.123"; //2 ~~"5"; //5 

双按位负数将小数点后的任何东西都删除,并将其转换为数字格式。 我被告知它比调用函数稍微快一些,但是我不完全相信。

编辑:我刚刚在这里看到的另一种方法(关于javascript >>>运算符,这是一个零填充右移),这表明,用这个运算符移动一个数字0将数字转换为uint32这是很好的,如果你也希望它没有签名 。 再次,这转换为一个无符号的整数 ,如果您使用有符号的数字,这可能会导致奇怪的行为。

 "-2.123" >>> 0; // 4294967294 "2.123" >>> 0; // 2 "-5" >>> 0; // 4294967291 "5" >>> 0; // 5 

当心,如果你使用parseInt在科学记数法中转换一个浮点数! 例如:

 parseInt("5.6e-14") 

会导致

 5 

代替

 0 

也作为一个方面说明:Mootools具有函数toInt()用于任何本地string(或浮点数(或整数))。

 "2".toInt() // 2 "2px".toInt() // 2 2.toInt() // 2 

请看下面的例子。这将有助于澄清你的疑问

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

通过使用parseint函数它只会给出op的整数存在,而不是string

我build议使用parseInt的parseFloat。 原因如下:

使用parseFloat:

 parseFloat('2.34cms') //Output: 2.34 parseFloat('12.5') //Output: 12.5 parseFloat('012.3') //Output: 12.3 

使用parseInt:

 parseInt('2.34cms') //Output: 2 parseInt('12.5') //Output: 12 parseInt('012.3') //Output: 12 

所以,如果你已经注意到parseInt放弃小数点后的值,而parseFloat让你使用浮点数,因此更适合如果你想保留小数点后的值。 当且仅当您确定需要整数值时才使用parseInt。

我们可以使用+(stringOfNumber)而不是使用parseInt(stringOfNumber)

例如: +("21")parseInt("21")一样返回21的int。

我们可以使用这个一元“+”运算符来parsingfloat …

尝试str - 0string转换为number

 > str = '0' > str - 0 0 > str = '123' > str - 0 123 > str = '-12' > str - 0 -12 > str = 'asdf' > str - 0 NaN > str = '12.34' > str - 0 12.34 

这里有两个链接来比较将string转换为int的几种方法的性能

https://jsperf.com/number-vs-parseint-vs-plus

http://phrogz.net/js/string_to_number.html

Google给了我这个答案,所以…

我实际上需要将一个string“保存”为一个整数,用于C和JavaScript之间的绑定,所以我将string转换为一个整数值:

 /* Examples: int2str( str2int("test") ) == "test" // true int2str( str2int("t€st") ) // "t¬st", because "€".charCodeAt(0) is 8364, will be AND'ed with 0xff Limitations: max 4 chars, so it fits into an integer */ function str2int(the_str) { var ret = 0; var len = the_str.length; if (len >= 1) ret += (the_str.charCodeAt(0) & 0xff) << 0; if (len >= 2) ret += (the_str.charCodeAt(1) & 0xff) << 8; if (len >= 3) ret += (the_str.charCodeAt(2) & 0xff) << 16; if (len >= 4) ret += (the_str.charCodeAt(3) & 0xff) << 24; return ret; } function int2str(the_int) { var tmp = [ (the_int & 0x000000ff) >> 0, (the_int & 0x0000ff00) >> 8, (the_int & 0x00ff0000) >> 16, (the_int & 0xff000000) >> 24 ]; var ret = ""; for (var i=0; i<4; i++) { if (tmp[i] == 0) break; ret += String.fromCharCode(tmp[i]); } return ret; } 

这里是速度比较(Mac Os只)… 🙂

对于chrome“plus”和“mul”是最快的,“Math.floor”是最慢的(> 700,000,00 op / sec)。 对于Firefox“加”是最慢(!)“多”是最快(> 900,000,000 op /秒)。 在Safari中,'parseInt'是fastes,'number'是最慢的(但是结果非常相似,> 13,000,000 <31,000,000)。 因此,将string转换为int的Safari比其他浏览器慢10倍以上。 所以赢家是' mul ':)

您可以通过此链接https://jsperf.com/casttonumber在浏览器上运行它;

在这里输入图像描述

在JavaScript中有很多方法可以将string转换为数字,所有的简单和方便,select适合您的方式:

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

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

在我看来,没有答案涵盖了所有的边界情况,因为parsing一个float会导致错误。

 function parseInteger(value) { if(value === '') return NaN; const number = Number(value); return Number.isInteger(number) ? number : NaN; } 
 parseInteger("4") // 4 parseInteger("5aaa") // NaN parseInteger("4.33333") // NaN parseInteger("aaa"); // NaN 

以上所有都是正确的。 请确定之前,这是一个string中的数字,通过做“typeot x ==='number'”其他智慧将返回NaN

  var num = "fsdfsdf242342"; typeof num => 'string'; var num1 = "12423"; typeof num1 => 'number'; +num1 = > 12423` 
 function doSth(){ var a = document.getElementById('input').value; document.getElementById('number') .innerHTML = toNumber(a) + 1; } function toNumber(str){ return +str; } 
 <input id="input" type="text"> <input onclick="doSth()" type="submit"> <span id="number"></span>