为什么 JavaScript 的 parseInt(0.0000005) 打印“5”?
创始人
2025-07-02 15:20:36
0

前言

最近开发项目时遇到一个奇怪的问题,parseInt(0.0000005) === 5。正常情况下输出0是正确的,为什么是5呢?我们一起来探讨一下这个问题。

1. 什么时候使用parseInt?

首先,你通常什么时候使用parseInt?大多数时候,我们使用它来解析字符串并返回其整数部分。带着这个问题,我们来看看parseInt方法。

2.关于parseInt的一些事情

根据 MDN 文档,“parseInt(string, radix) 函数解析字符串参数并返回指定基数(数学数字系统中的基数)的整数。”

语法

parseInt(string)
parseInt(string, radix)

例如:

parseInt('0.5') // 0
parseInt('0.5') // 0
parseInt('0.05') // 0
parseInt('0.005') // 0
parseInt('0.0005') // 0
parseInt('0.00005') // 0
parseInt('0.000005') // 0
parseInt('015') // 15
parseInt('015', 8) // 13
parseInt('15px', 10) // 15

3. parseInt如何转换数字?

当parseInt的第一个参数是数字时,它如何解析?

parseInt(0.0000005) === 5 的真相也在这里......

3.1. 第一步?将数字转换为字符串。

让我们使用 String 函数检查基于字符串的值,看看每个值的输出是什么:

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' pay attention here

3.2 第二步是进行舍入操作。

正如用户 SeyyedKhandon 在他的 Stack Overflow 回答中解释的那样:

“当我们使用 parseInt(0.0000005) 时,它等于 parseInt('5e-7') 并且基于定义:

parseInt 只能将字符串的前导部分解释为整数值;它忽略任何不能解释为整数表示法一部分的代码单元,并且没有给出任何此类代码单元被忽略的指示。

parseInt(0.0000005)
parseInt('5e-7') // 5

最后,答案将仅返回 5,因为它是直到非字符 e 为止唯一一个数字字符,因此其余的 e-7 将被丢弃。”

4. 如何安全地获取浮点数的整数部分?

建议使用以下 Math.floor() 函数:

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

5.举一反三

现在,你能解释一下为什么 parseInt(99999999999999999999999999) 等于 1 吗?


相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
30分钟搞定iOS自定义相机 最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究...
Intel将Moblin社区控... 本周二,非营利机构Linux基金会宣布,他们将担负起Moblin社区的管理工作,而这之前,Mobli...