parseInt() 是 JavaScript的内置函数,用于解析一个字符串,并返回一个整数。常规情况下,使用没有问题,但是如果用来处理很小的float浮点类型数据时,会出现bug。如:0.0000001、0.00000005这样的数。
parseInt
- 语法
1 | |
- 参数
| 参数 | 描述 |
|---|---|
| string | 必需。要被解析的字符串。 |
| radix | 可选。不传默认为0,表示要解析的数字的基数。该值介于 2 ~ 36 之间。 |
使用
- 一般情况
1 | |
- 特殊情况
1 | |
parseInt() 把 float 数据 0.0000001 解析为 -> 1,这就很奇怪了?
原因
出现这种bug的原因大概有两种:
parseInt()函数的第一个参数默认字符串,如果不是字符串可能在处理时会进行转换。像这种:
1 | |
而对于字符串 '1e-7' ,parseInt()函数会解析为1,
1 | |
- 当遇到极小的数(绝对值小于
0.0000001),Js会自动转成指数形式,如:
1 | |
总结: parseInt()总是将其第一个参数转换为字符串,所以小于10^-6的浮点数将以指数形式表示法编写。然后parseInt()从float的指数表示法中提取整数!
解决方案
如果是小于10^-6的浮点数,可以使用Math.floor()函数来处理:
1 | |
这样就完美的解决了 parseInt(0.0000001) 返回 1 的问题。
举一反三
当遇到极大的值(绝对值大于9999999999999998),parseInt()函数也会出现bug。如下:
1 | |
欢迎访问:天问博客
本文作者: Tiven
发布时间: 2022-01-06
最后更新: 2024-01-12
本文标题: parseInt(0.0000001)返回1的bug
本文链接: https://www.tiven.cn/p/5cf344dc/
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明出处!
发布时间: 2022-01-06
最后更新: 2024-01-12
本文标题: parseInt(0.0000001)返回1的bug
本文链接: https://www.tiven.cn/p/5cf344dc/
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明出处!


