为什么JavaScript的parseInt(0.0000005)执行后会输出5?
运行结果原因分析
parseInt的核心执行逻辑有两个关键步骤:- 如果传入的第一个参数不是字符串类型,会先调用
toString()方法将其强制转换为字符串,再执行解析 - 从字符串的首字符开始匹配数字,遇到第一个非数字字符就立即停止解析,返回前面匹配到的整数内容,无匹配结果则返回
NaN
- 如果传入的第一个参数不是字符串类型,会先调用
- 浮点数转字符串的规则差异是导致结果异常的核心原因:
- 当小于1的浮点数大于等于
1e-6(即0.000001)时,toString()会输出普通小数格式:
比如0.5.toString()返回"0.5"、0.000005.toString()返回"0.000005",这类字符串首字符都是0,parseInt解析到.就停止,所以统一返回0 - 当小于1的浮点数小于
1e-6时,toString()会自动转为科学计数法格式:
示例中的0.0000005等于5e-7,调用toString()后得到的是字符串"5e-7"
- 当小于1的浮点数大于等于
parseInt解析"5e-7"时,只会识别到开头的数字5,后续的e不属于整数的合法字符,解析直接终止,最终返回整数5
注意:如果需要对浮点数做取整操作,不要依赖
parseInt,推荐使用Math.trunc()、Math.floor()等专门处理数值取整的API。
内容的提问来源于stack exchange,提问作者SeyyedKhandon
相关产品推荐
相关产品推荐

