parseInt和Math.floor的区别

2023-11-15

引入

在大多数情况下,他们都可以用来取一个小数的整数部分,但是在某些特殊场景下,就只能使用math.floor。比如我们想取一个区间范围内的值,如果使用…,就可以取到…,但如果使用…,就只能取到。这是为什么呢?首先我们还是从他们的原理开始看。

console.log(Math.floor(4.95));  // 4
console.log(Math.floor(4.5));   // 4
console.log(Math.floor(4.05));  // 4
console.log(Math.floor(-4.05)); // -5

区别

Math.floor 它只是简单地将一个数向下取整到最接近的整数。
它只接受一个参数:你想要向下取整的数。

console.log(Math.floor(4.95));  // 4
console.log(Math.floor(4.5));   // 4
console.log(Math.floor(4.05));  // 4
console.log(Math.floor(-4.05)); // -5

parseInt在处理负数时不会向下取整:

console.log(Math.floor(-4.05)); // -5
console.log(parseInt('-4.05')); // -4

parseInt会忽略任何数字后面的非数字字符:

console.log(parseInt('4.05abc'));  // 4
console.log(Math.floor('4.05abc'));  // NaN

parseInt也可以用来在不同的基数中解析字符串:

console.log(parseInt('11', 2));  // 3 在2进制中,11表示的是十进制中的3

场景

我们再看到最开始的例子,如果我们想实现一个函数,能够获取 -2 到 -1之间的随机数(包括 -2 和 -1)那么应该怎么做呢?

     function randomRange(min, max) {
       return Math.floor(Math.random() * (max - min + 1) + min);
     }
    console.log(randomRange(-2, -1));

首先,它为什么能获取 -2 到 -1之间的随机数呢?

(max - min)的值是 1,Math.random()的返回值是 [0,1)

所以 Math.random()*(max - min)的范围值 [0,1)

Math.random() * (max - min) + min 的范围是 [-2,-1)

很多同学可能会发现,永远取不到 -1?因为 Math.floor永远是向下取整。

如果我们修改为以下样子:

(max + 1 - min)的值是 2, Math.random()*(max + 1 - min)的范围值 [0,2)

Math.random() * (max + 1 - min) + min 的范围是 [-2,0)。

其中,-2,-1.5 一直到-1,都会取-2。而 -1,-0.5一直到0,都会取-1。

====================================

 function randomRange(min, max) {
      return parseInt(Math.random() * (max + 1 - min) + min);
    }

(max - min)的值是 1,Math.random()*(max - min)的范围值 [0,1)
Math.random() * (max - min) + min 的范围是 [-2,-1) 永远是 -1,取不到-2。

(max + 1 - min)的值是 2, Math.random()*(max + 1 - min)的范围值 [0,2)
Math.random() * (max + 1 - min) + min 的范围是 [-2,0)。
我们仍然取不到-2,因为 -1.9 -1.8 -1.7都会取 -1 ,-0.9,-0.8都会取0,所以它会在 -1 和 0之间随机取

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

parseInt和Math.floor的区别 的相关文章

随机推荐

  • Oracle数据库表的约束

    Oracle数据库约束类型主要有以下几个 primary key 主键约束 foreign key 外键约束 check 检查约束 unique 唯一约束 not null 非空约束 alter table table name add c
  • TypeScript实现八大排序与搜索算法

    前言 我们在页面上渲染数据时 通常会根据特定规则来对数据进行一个排序 然后再将其渲染到页面展示给用户 那么对数据进行排序有很多种方式 哪一种效率高 哪一种稳定性好 那一种占用内存小 本文将详解经典的八大排序算法以及三种搜索算法 并用Type
  • 【排错日记】PageHelper插件的默认分页参数

    现象 没有写如下代码 执行的结果却被分页显示了 PageHelper startPage listParam getPageNum listParam getPageSize 源码分析 调用方法判断是否需要进行分页 如果不需要 直接返回结果
  • k8s 启动探针生存探针&就绪探针

    目录 k8s 启动探针 存活探针 就绪探针 存活 就绪探针的区别 探针处理程序和结果 启动探针 存活探针 livenessProbe exec livenessProbe httpget livenessProbe tcp 就绪探针 k8s
  • 【总结】NPU/CPU/GPU 傻傻分不清?

    本文主要解答以下问题 NPU是新玩意儿吗 芯片里面的CPU GPU NPU究竟是什么 它们是怎么工作的 引言 中国首款嵌入式NPU诞生 6月20日 中星微 数字多媒体芯片技术 国家重点实验室在京宣布 中国首款嵌入式NPU 神经网络处理器 芯
  • AWTRIX像素屏时钟搭建

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 AWTRIX像素屏时钟搭建 前言 一 AWTRIX是什么 二 AWTRIX像素屏时钟搭建步骤 1 材料准备 2 ESP8266固件刷写 3 接线方式 4 手机端配网 4 服务
  • 2022中山大学计算机技术专硕考研初试、复试经验帖

    2022年中山大学计算机技术专硕考研初试 复试经验帖 个人简介 推荐几个我自己感觉对考研非常有帮助的小助手吧 可以帮助节省时间 考研时间规划总览 初试篇 数学 英语 政治 408 复试篇 如果觉得有帮助的话可以点个收藏后续会修改和增加内容
  • shell判断程序是否运行,守护进程

    一 需求 服务部署在linux上 要求服务器上的服务可以一直保持正常运行 二 问题 在linux上部署的微服务 不知道什么原因过一段时间就自己停掉了 无法启动 三 解决办法 添加angle守护进程 通过定时执行脚本来判断程序是否运行 若不是
  • 微信小程序获取微信步数

    获取步数授权 获取用户微信运动步数的前提是用户授权小程序访问他的微信运动数据 微信对用户隐私有严格的控制 任何涉及用户隐私的敏感数据都需要用户同意后小程序才能获取 只有当用户点击 允许 后 小程序才能获取用户的微信运动数据 小程序的用户授权
  • Vue组件通信方式详解(全面版)

    在Vue应用开发中 组件通信是一个重要的话题 不同的组件可能需要在不同的情况下进行数据传递和交互 Vue提供了多种方式来实现组件通信 每种方式都有其适用的场景 本文将详细介绍Vue中实现组件通信的各种方式 并为每种方式提供通俗易懂的代码示例
  • Java并发编程实战——并发容器之ConcurrentHashMap(JDK 1.8版本)

    文章目录 ConcurrentHashmap简介 从关键属性及类上来看ConcurrentHashMap的结构 put 方法管中窥豹 CAS关键操作 ConcurrentHashmap简介 在使用HashMap时在多线程情况下扩容会出现CP
  • Python3,10行代码竟然让URL变短了,没想到还可以这么玩。

    让URL变短的方法 1 引言 2 代码实战 2 1 定义 2 2 常用函数 2 3 示例 3 总结 1 引言 小屌丝 鱼哥 有没有什么方法 能让url变短一点 小鱼 我去 url怎么惹你了 你让它变短 小屌丝 没有了 我就是觉得url太长了
  • 西门子fifo_西门子官方开发的LGF库全中文解读,重磅推荐

    Hello 欢迎大家来到 西家大书 这里可能是西门子最内部的知识分享平台 众所周知 TIA Portal STEP 7 具有一个功能强大的LGF全局库 它可以计算随机数 最大值 最小值 平均值 实现搜索功能 计算日出日落时间等等 但关于LG
  • @符号的用法

    代码中 符号有时候会在有些代码中遇到 其具体有什么作用呢 主要用法 限定作用 用来限定字符串 具体而言实际上就是表示字符串中的 字符不再认为是转义标志 而就是 符号本身 常见的用法是如果我们写一个文件所处的路径 比如 D 文本文件 路径下的
  • iframe如何发送请求_如何优雅地处理前端异常?

    前端一直是距离用户最近的一层 随着产品的日益完善 我们会更加注重用户体验 而前端异常却如鲠在喉 甚是烦人 一 为什么要处理异常 异常是不可控的 会影响最终的呈现结果 但是我们有充分的理由去做这样的事情 增强用户体验 远程定位问题 未雨绸缪
  • Java 程序员学习中各阶段的建议

    对于Java程序猿学习的建议 这一部分其实也算是今天的重点 这一部分用来回答很多群里的朋友所问过的问题 那就是LZ你是如何学习Java的 能不能给点建议 今天LZ是打算来点干货 因此咱们就不说一些学习方法和技巧了 直接来谈每个阶段要学习的内
  • Java中的流

    文件管理 Java语言使用File类对文件和目录进行操作 查找文件时需要实现FilenameFilter或FileFilter接口 另外 读写文件内容可以通过FileInputStream FileOutputStream FileRead
  • c提高学习——(字符串强化_查找字串)实现strstr

    先简单的看一下strstr的用法 include
  • Hacking The Box----Awkward

    信息收集 nmap扫描 发现22号端口和80号端口打开 80号端口上运行着http服务器 访问ip后URL变为hat valley htb 修改 etc hosts文件 添加10 10 11 185 hat valley htb 然后就能正
  • parseInt和Math.floor的区别

    引入 在大多数情况下 他们都可以用来取一个小数的整数部分 但是在某些特殊场景下 就只能使用math floor 比如我们想取一个区间范围内的值 如果使用 就可以取到 但如果使用 就只能取到 这是为什么呢 首先我们还是从他们的原理开始看 co