如何在 JavaScript 中将字符串转换为整数?
网友回答:
尝试解析函数:
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
请注意,在解析任何有效数据后会忽略错误数据。
此 guid 将解析为 51:parseInt
var result = parseInt('51e3daf6-b521-446a-9f5b-a1bb4d8bac36', 10) == 51; // Returns true
网友回答:
最简单的方法是使用本机函数:Number
var x = Number("1000")
如果这对你不起作用,那么有parseInt,unary plus,parseFloat with floor和Math.round方法。
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");
如果你是那种在调用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 中,有两种主要方法可以将字符串转换为数字。一种方法是解析它,另一种方法是将其类型更改为数字。其他答案中的所有技巧(例如,一元加号)都涉及隐式将字符串的类型强制为数字。您也可以使用 Number 函数显式执行相同的操作。
解析
var parsed = parseInt("97", 10);
parseInt 和 parseFloat 是用于将字符串解析为数字的两个函数。如果解析命中它无法识别的字符,解析将静默停止,这对于解析像“92px”这样的字符串很有用,但它也有些危险,因为它不会给你任何类型的错误输入错误输入,相反,你会得到 NaN,除非字符串以数字开头。字符串开头的空格将被忽略。下面是一个示例,它执行与您想要的操作不同的事情,并且没有指示出现任何问题:
var widgetsSold = parseInt("97,800", 10); // widgetsSold is now 97
最好始终将基数指定为第二个参数。在较旧的浏览器中,如果字符串以 0 开头,如果未指定基数,它将被解释为八进制,这让很多人感到惊讶。十六进制的行为是通过在未指定基数的情况下让字符串以 0x 开头来触发的,例如 .该标准实际上在 ECMAScript 5 中发生了变化,因此如果没有指定基数,现代浏览器不再在前导 0 时触发八进制。parseInt 可以理解基数高达 36 的基数,在这种情况下,大写和小写字母都被视为等效字母。0xff
将字符串的类型更改为数字
上面提到的不使用 parseInt 的所有其他技巧都涉及将字符串隐式强制转换为数字。我更喜欢明确地这样做,
var cast = Number("97");
这与解析方法具有不同的行为(尽管它仍然忽略空格)。它更严格:如果它不理解整个字符串而不是返回,所以你不能将其用于像.由于您需要一个基元数字而不是 Number 包装器对象,因此请确保不要放在 Number 函数前面。NaN
97px
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"))
请记住,强制理解指数符号和无穷大,所以不是 NaN,而解析方法则不然。2e2
200
习惯
这两种方法都不太可能完全按照您的要求。例如,通常我希望在解析失败时抛出错误,并且我不需要对无穷大、指数或前导空格的支持。根据您的用例,有时编写自定义转换函数是有意义的。
始终检查 Number 或其中一个解析方法的输出是否是预期的数字类型。您几乎肯定会想要确保该数字不是 NaN(通常是您发现解析失败的唯一方法)。isNaN
模板简介:该模板名称为【如何在 JavaScript 中将字符串转换为整数?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【JavaScript】栏目查找您需要的精美模板。