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

问:

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

答1:

huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。

最简单的方法是使用本机 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)

2015 年更新:从 ECMAScript 5 开始,带有前导零“0”的字符串也获得默认的基数 10,而不是 8。仅旧浏览器需要显式指定基数 10。 kangax.github.io/compat-table/es5/…

请注意 Number('') 成功(返回 0),尽管大多数人不会认为空字符串表示有效数字。并且 parseInt('3q') 成功(返回 3),即使大多数人不认为 '3q' 是一个有效数字。

小心。 parseInt 和 parseFloat 都乐于接受信件。只有 Number 始终返回 NaN。

在我看来,对于每个不完全是整数的值,解析整数应该导致异常/NaN。因此,这些都不起作用,因为 Number('2.2') 强制转换为 2,而 Number('') 强制转换为 0。

parseInt("6-4") 返回 6,而 Number("6-4") 返回 NaN.... 例如,如果您正在测试可能是 guid 的字符串,这可能会有很大的不同。

答2:

保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com

尝试 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

请注意,parseInt 会在解析任何有效内容后忽略错误数据。 此 guid 将解析为 51:

var result = parseInt('51e3daf6-b521-446a-9f5b-a1bb4d8bac36', 10) == 51; // Returns true

huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。

2016 年不再需要 Radix。

它可能不适用于较新的浏览器,但仍需要 radix 以实现向后兼容性。

'' 或 '02" 或 "02+1" 或 "03,12" 或 "03.12" 呢?

请注意,这会忽略数字后的错误数据。例如,parseInt('0asdf', 10) 产生 0。

最新:parseInt("010") == 10; // 现在返回 true - 按 ctrl-shift-j 并将其粘贴到浏览器控制台中,以亲自查看 :)

答3:

huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感

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

解析

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

parseInt 和 parseFloat 是用于将字符串解析为数字的两个函数。如果遇到无法识别的字符,解析将静默停止,这对于解析“92px”之类的字符串很有用,但它也有点危险,因为它不会在输入错误时给您任何错误,而是您’ 将返回 NaN,除非字符串以数字开头。字符串开头的空格被忽略。下面是一个例子,它做了一些与你想要的不同的事情,并且没有给出任何错误的迹象:

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

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

将字符串的类型更改为数字

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

var cast = Number("97");

这与解析方法有不同的行为(尽管它仍然忽略空格)。它更严格:如果它不理解整个字符串而不是返回 NaN,因此您不能将它用于像 97px 这样的字符串。由于您需要原始数字而不是数字包装对象,因此请确保不要将 new 放在 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,而 parse 方法则不然。

风俗

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

始终检查 Number 或其中一种解析方法的输出是否是您期望的数字。您几乎肯定会想要使用 isNaN 来确保数字不是 NaN(通常是您发现解析失败的唯一方法)。

这取决于您是否希望您的代码也接受 97,8,00 和类似的。一个简单的技巧是执行 .replace(/[^0-9]/g, "") ,它将从您的字符串中删除所有非数字,然后进行转换。这当然会忽略各种疯狂的字符串,你可能会出错,而不仅仅是解析......

@kybernetikos 应该是 .replace(/[^0-9.]/g, ""),否则“1.05”将变为“105”。

非常正确,尽管无论如何我都不会对重要的代码使用类似的东西 - 有很多方法可以让你真的不想让一些东西通过。

我发现在代码中使用 Number 更具可读性,因此感谢您指出它是一种解决方案。

@kybernetikos 在 var fixed = Number("97.654").toFixed(0); // rounded rather than truncated 中,我们得到一个 string(因为 .toFixed 方法)而不是 number(整数)。如果我们想要四舍五入的整数,最好只使用 Math.round("97.654");

答4:

打造属于自己的副业,开启自由职业之旅,从huntsbot.com开始!

ParseInt() 和 + 是不同的

parseInt("10.3456") // returns 10

+"10.3456" // returns 10.3456

大概 +"..." 本质上是 Number("...")。

答5:

huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。

最快的

var x = "1000"*1;

测试

这是速度的小比较(仅限Mac Os)… 😃

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

您可以通过此链接在浏览器上运行它https://jsperf.com/js-cast-str-to-number/1

https://i.stack.imgur.com/PXxhB.png

更新

我还测试了 var x = ~~“1000”; - 在 Chrome 和 Safari 上比 var x = “1000”*1 慢一点(<1%),在 Firefox 上快一点(<1%)。我更新上面的图片并测试

测试 A、B、E 和 F 的结果之间没有显着差异——它们本质上是相同的,

我在 Chrome 上的速度提高了 ~~"1000",但它们都非常接近

答6:

huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。

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

我使用这种将字符串转换为整数的方式

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

所以,乘以1的时候,值没有变化,但是js会自动返回一个数字。

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

您可以创建简单的函数来使用,例如

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

https://i.stack.imgur.com/ICAj5.png

答7:

huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求

试试 parseInt。

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

问题的正确答案

答8:

huntsbot.com – 高效赚钱,自由工作

我在这里发布了错误的答案,对不起。固定的。

这是一个老问题,但我喜欢这个技巧:

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

双位负数删除小数点后的任何内容并将其转换为数字格式。有人告诉我它比调用函数和诸如此类的东西要快一些,但我并不完全相信。

编辑:我刚刚看到的另一种方法 here (关于 javascript >>> 运算符的问题,这是一个零填充右移),它表明使用此运算符将数字移动 0 会将数字转换为 < strong>uint32 如果你还想要它unsigned,那就太好了。同样,这会转换为 无符号整数,如果您使用有符号数,可能会导致奇怪的行为。

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

答9:

HuntsBot周刊–不定时分享成功产品案例,学习他们如何成功建立自己的副业–huntsbot.com

请注意,如果您使用 parseInt 将浮点数转换为科学计数法!例如:

parseInt("5.6e-14") 

将导致

5 

代替

0

使用 parseInt 不适用于浮点数。 parseFloat 在这种情况下可以正常工作。

这是一个有效的问题——即使 parseInt("2e2") 是一个整数,如果 parseInt 理解指数表示法,它也会是 200,但实际上返回 2,因为它没有。

@kybernetikos - 恕我直言,期望 parseInt 理解浮点表示是不合理的。更适合 parseFloat 或 Number,然后根据需要四舍五入或截断为 int。这是一个更清晰的意图陈述。

答10:

一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而huntsbot.com提供了这个机会

在 Javascript 中,您可以执行以下操作:-

解析整数

parseInt("10.5") //returns 10

乘以 1

var s = "10";
s = s*1;  //returns 10

使用一元运算符 (+)

var s = "10";
s = +s;  //returns 10

使用位运算符

(注意:它在 2140000000 之后开始中断。例如:- ~~“2150000000” = -2144967296)

var s= "10.5";
s = ~~s; //returns 10

使用 Math.floor() 或 Math.ceil()

var s = "10";
s = Math.floor(s) || Math.ceil(s); //returns 10

答11:

与HuntsBot一起,探索全球自由职业机会–huntsbot.com

请看下面的例子。它将帮助您消除疑问

Example                  Result

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

通过使用 parseint 函数它只会给出整数的 op 而不是字符串

原文链接:https://www.huntsbot.com/qa/oDQW/how-to-convert-a-string-to-an-integer-in-javascript?lang=zh_CN&from=csdn

huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值