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 许可协议进行许可。转载请注明出处!
v1.4.16