为什么 JavaScript 的 parseInt(0.0000005) 打印“5”?

简介: 为什么 JavaScript 的 parseInt(0.0000005) 打印“5”?

为什么 JavaScript 中的 parseInt(0.0000005) 打印 5?一个惊人的问题!
image.png
前言
最近,我在开发项目时遇到了一个奇怪的问题,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
  1. 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' 请注意这里

3.2 第二步,做舍入操作
当我们使用 parseInt(0.0000005) 时,它实际等于 parseInt('5e-7')

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

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

最后,答案将返回 5,只是因为它是唯一一个在非字符 e 之前是数字的字符,所以其余的 e-7 将被丢弃。”

  1. 如何安全获取浮点数的整数部分?
    推荐使用以下 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
目录
相关文章
|
JavaScript 前端开发
[阿里巴巴最新面试题----JavaScript中map(parseInt)的问题]
[阿里巴巴最新面试题----JavaScript中map(parseInt)的问题]
64 0
|
JavaScript
Node.js面试题:map(parseInt)
Node.js面试题:map(parseInt)
133 0
|
JavaScript 前端开发
JavaScript parseInt() 函数
原文:JavaScript parseInt() 函数 parseInt(string, radix) string:必需。要被解析的字符串 radix:可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。
818 0
|
JavaScript 前端开发
JavaScript parseInt() toString()函数
原文:JavaScript parseInt() toString()函数 parseInt(string, radix) string:必需。要被解析的字符串 radix:可选。表示要解析的数字的基数。
1099 0
|
JavaScript 前端开发 测试技术
Javascript之旅——第四站:parseInt中要注意的坑
原文:Javascript之旅——第四站:parseInt中要注意的坑     前些天信用卡站点要接入一个新功能,不过还真比较坑爹,asp站点,大家都知道信用卡的背面是有一个有效期的,在对接银行中这个信息 一定是要传给银行做数据校验,用户在语音输入信用卡有效期后,系统会做一个有效期判断,为了不必要的麻烦,就是判断过期时间一定不能在 一个月内,由于输入的年月日在三个文本框中,再加上我嫌转成时间麻烦,就索性直接拿年,月,日的文本内容直接强转成int类型来判断,此为 背景。
1006 0
|
JavaScript 前端开发
javascript字符串数字转化函数parseInt的奇怪现象
今天突然产品找我说,一个网页无法提交信息,错误是“网页弹出提示信息:表单A的值必须小于表单B的值,但是的确是小于啊,怎么还是提示?” 我看了看,javascript代码如下:   if(parseInt(A.
815 0
|
28天前
|
JavaScript 前端开发
JavaScript中的原型 保姆级文章一文搞懂
本文详细解析了JavaScript中的原型概念,从构造函数、原型对象、`__proto__`属性、`constructor`属性到原型链,层层递进地解释了JavaScript如何通过原型实现继承机制。适合初学者深入理解JS面向对象编程的核心原理。
25 1
JavaScript中的原型 保姆级文章一文搞懂