龙空技术网

js 中 parseInt() 的奇怪现象

理想世界的梦 449

前言:

今天朋友们对“js中parseint的用法”大概比较讲究,朋友们都需要了解一些“js中parseint的用法”的相关知识。那么小编也在网摘上搜集了一些关于“js中parseint的用法””的相关知识,希望朋友们能喜欢,同学们快快来了解一下吧!

parseInt()是一个内置的 JavaScript 函数,可以从数字字符串中解析整数。例如,让我们从数字字符串中解析整数'100'

const number = parseInt('100');  // => 100

正如预期的那样,'100' 被解析为整数100

parseInt(numericalString, radix)还有第二个参数radix:数字字符串参数所使用的基数。radix 参数允许您解析来自不同数字基数的整数,最常见的有 2、8、10 和 16。

如下示例:

parseInt('100', 2) 解析'100'为以 2 为基数的整数:因此它返回值4(十进制)。

1. parseInt()的奇怪行为

parseInt(numericalString)总是将其第一个参数转换为字符串(如果它不是字符串),然后将该数字字符串解析为整数值。

这就是为什么您可以(但不建议!)使用parseInt()来提取浮点数的整数部分:

parseInt(0.5);            // => 0parseInt(0.05);          // => 0parseInt(0.005);        // => 0parseInt(0.0005);      // => 0parseInt(0.00005);    // => 0parseInt(0.000005);  // => 0

提取浮点数的整数部分,如0.5,0.05等,结果为0. 这些都是预料的结果。

试试提取 0.0000005 的整数部分,结果是什么?

parseInt(0.0000005);  // => 5

parseInt() 将浮点数解析为 0.0000005,整数部分是5,这有点出乎意料...

为什么 parseInt(0.0000005) 会有如此奇怪的行为?

2.解开parseInt()之谜

让我们再看看parseInt(numericalString)它的第一个参数做了什么:如果它不是字符串,则将其转换为字符串,然后进行解析,并返回解析后的整数。

让我们尝试手动将浮点数转换为字符串表示:

String(0.5);      // => '0.5'String(0.05);     // => '0.05'String(0.005);    // => '0.005'String(0.0005);   // => '0.0005' String(0.00005);  // => '0.00005'String(0.000005); // => '0.000005'String(0.0000005); // => '5e-7'

字符串的String(0.0000005)的结果与其他浮点数不同,它返回一个指数符号的字符串表示!

这是一个很重要的线索!

当指数表示法被解析为整数时,您会得到数字5

parseInt(0.0000005);  // => 5// 等同于parseInt(5e-7);      // => 5// 等同于parseInt('5e-7');    // => 5

parseInt('5e-7') 跳过'e-7',使用第一个数字'5'

谜团已揭开!因为parseInt()总是将其第一个参数转换为字符串,所以小于 10 -6的浮点数以指数表示法编码。然后parseInt()从浮点数的指数符号中提取整数。

附带说明一下,为了安全地提取浮点数的整数部分,我推荐Math.floor()函数:

Math.floor(0.5);      // => 0Math.floor(0.05);     // => 0Math.floor(0.005);    // => 0Math.floor(0.0005);   // => 0Math.floor(0.00005);  // => 0Math.floor(0.000005);  // => 0Math.floor(0.0000005);  // => 0
三、结论

parseInt()是将数字字符串解析为整数的函数。

尝试使用提取浮点数的整数部分时必须谨慎使用 parseInt()

转换小于 10 -6的浮点数(例如0.0000005,与5e-7相同)时,parseInt()会导致意想不到的结果:只有指数表示法的重要部分(例如 5e-7)被解析为5

你能解释为什么parseInt(999999999999999999999)等于1吗?在下面的评论中写下您的解释!

标签: #js中parseint的用法 #javascript中parseint的用法 #js中parseint函数