如何在JavaScript中将字符串转换为整数?
当前回答
在JavaScript中,您可以执行以下操作:
解析Int
parseInt("10.5") // Returns 10
与1相乘
var s = "10";
s = s*1; // Returns 10
使用一元运算符(+)
var s = "10";
s = +s; // Returns 10
使用按位运算符
(注:在2140000000之后开始破裂。示例:~~“2150000000”=-214967296)
var s = "10.5";
s = ~~s; // Returns 10
使用Math.floor()或Math.ceil()
var s = "10";
s = Math.floor(s) || Math.ceil(s); // Returns 10
其他回答
我使用这种方式将字符串转换为数字:
var str = "25"; // String
var number = str*1; // Number
因此,当乘以1时,值不会改变,但JavaScript会自动返回一个数字。
但如下图所示,如果您确定str是一个数字(或可以表示为数字),则应使用此选项,否则它将返回NaN,而不是数字。
您可以创建简单的函数来使用。,
function toNumber(str) {
return str*1;
}
在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(通常是发现解析失败的唯一方法)。
尝试parseInt。
var number = parseInt("10", 10); //number will have value of 10.
最简单的方法是使用本机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)
在我看来,没有答案涵盖所有边缘情况,因为解析浮点值会导致错误。
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
推荐文章
- 我如何使用Jest模拟JavaScript的“窗口”对象?
- 我应该如何从字符串中删除所有的前导空格?- - - - - -斯威夫特
- 我如何等待一个承诺完成之前返回一个函数的变量?
- 在JavaScript中根据键值查找和删除数组中的对象
- 使嵌套JavaScript对象平放/不平放的最快方法
- 如何以及为什么'a'['toUpperCase']()在JavaScript工作?
- 有Grunt生成index.html不同的设置
- 文档之间的区别。addEventListener和window。addEventListener?
- 如何检查动态附加的事件监听器是否存在?
- 将整数转换为字符串,以逗号表示千
- 如何写setTimeout与参数Coffeescript
- 将JavaScript字符串中的多个空格替换为单个空格
- printf()和puts()在C语言中的区别是什么?
- JavaScript: override alert()
- 重置setTimeout