最近开发项目时遇到一个奇怪的问题,parseInt(0.0000005) === 5。正常情况下输出0是正确的,为什么是5呢?我们一起来探讨一下这个问题。
首先,你通常什么时候使用parseInt?大多数时候,我们使用它来解析字符串并返回其整数部分。带着这个问题,我们来看看parseInt方法。
根据 MDN 文档,“parseInt(string, radix) 函数解析字符串参数并返回指定基数(数学数字系统中的基数)的整数。”
语法
parseInt(string)parseInt(string, radix)
例如:
parseInt('0.5') // 0parseInt('0.5') // 0parseInt('0.05') // 0parseInt('0.005') // 0parseInt('0.0005') // 0parseInt('0.00005') // 0parseInt('0.000005') // 0parseInt('015') // 15parseInt('015', 8) // 13parseInt('15px', 10) // 15
当parseInt的第一个参数是数字时,它如何解析?
parseInt(0.0000005) === 5 的真相也在这里......
让我们使用 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
正如用户 SeyyedKhandon 在他的 Stack Overflow 回答中解释的那样:
“当我们使用 parseInt(0.0000005) 时,它等于 parseInt('5e-7') 并且基于定义:
parseInt 只能将字符串的前导部分解释为整数值;它忽略任何不能解释为整数表示法一部分的代码单元,并且没有给出任何此类代码单元被忽略的指示。
parseInt(0.0000005)
parseInt('5e-7') // 5
最后,答案将仅返回 5,因为它是直到非字符 e 为止唯一一个数字字符,因此其余的 e-7 将被丢弃。”
建议使用以下 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(99999999999999999999999999) 等于 1 吗?
本文链接:http://www.28at.com/showinfo-26-11864-0.html为什么 JavaScript 的 parseInt(0.0000005) 打印“5”?
声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com
上一篇: 十道Java限流器面试题和答案
下一篇: 关于架构“重构”的要点