当前位置: 首页 > news >正文

别再用 parseInt 乱砍小数了!来认识 JS 的“地板函数”:Math.floor

你是不是经常遇到这样的场景?

  • 生成一个随机整数(比如 1 到 10)
  • 把 3.9 变成 3,把 -2.1 变成 -3
  • 分页时计算总页数(比如 23 条数据,每页 5 条 → 需要 5 页)

这时候,很多人会随手写parseInt(3.9)~~3.9,但其实最安全、最清晰的做法是用Math.floor()

今天我们就用大白话,带你彻底搞懂这个看似简单却容易踩坑的函数。


一、先看效果:Math.floor到底干了啥?

Math.floor()的作用就一个:向下取整

“向下”不是指“变小”,而是指往数轴的左边走,取不大于该数的最大整数

举几个例子:

Math.floor(3.7)// → 3Math.floor(3.1)// → 3Math.floor(3)// → 3Math.floor(-2.3)// → -3 (注意!不是 -2)Math.floor(-2.9)// → -3

✅ 关键理解:

  • 对正数:直接“砍掉小数部分”
  • 对负数:变得更小(因为 -3 < -2.3)

🧠 记忆技巧:想象你站在数字上,脚下是“地板(floor)”,你只能往下掉到最近的整数地板上。


二、为什么不用parseInt~~

很多人图省事,这样写:

parseInt(3.9)// → 3 ✅ 看起来对~~3.9// → 3 ✅ 也对

但问题出在负数和边界情况

parseInt(-2.3)// → -2 ❌(实际需要 -3)~~(-2.3)// → -2 ❌(位运算截断,不是向下取整)

Math.floor(-2.3)正确返回-3

另外:

  • parseInt本质是字符串解析函数,传入数字会先转成字符串,效率低且语义错误
  • ~~是位运算 hack,可读性差,且只适用于 32 位整数范围

结论:只要你想“向下取整”,就用Math.floor,别偷懒!


三、实战场景:它到底能干啥?

场景1:生成指定范围的随机整数

这是Math.floor最经典的用法!

// 生成 0 到 9 的随机整数constrandom0to9=Math.floor(Math.random()*10);// 生成 1 到 10 的随机整数constrandom1to10=Math.floor(Math.random()*10)+1;// 通用函数:min 到 max(包含)functionrandomInt(min,max){returnMath.floor(Math.random()*(max-min+1))+min;}console.log(randomInt(5,15));// 比如输出 9

🔍 原理:

  • Math.random()返回 [0, 1) 之间的数(包含 0,不包含 1)
  • 乘以 10 → [0, 10)
  • Math.floor→ 0,1,2,…,9(共10个整数)

如果用Math.round,0 和 9 的概率会减半,分布不均!


场景2:分页计算总页数

假设有 23 条数据,每页显示 5 条,问需要几页?

consttotalItems=23;constitemsPerPage=5;// 错误:23 / 5 = 4.6 → parseInt 得 4,但实际需要 5 页!// 正确:用 Math.ceil(向上取整)?等等,我们也可以用 floor!// 方法1:用 Math.ceil(更直接)consttotalPages1=Math.ceil(totalItems/itemsPerPage);// → 5// 方法2:用 Math.floor 巧妙转换consttotalPages2=Math.floor((totalItems+itemsPerPage-1)/itemsPerPage);// → 5

虽然这里Math.ceil更直观,但很多算法题或老代码会用floor实现,所以理解原理很重要。


场景3:时间处理(比如取整小时)

constnow=newDate();consthours=now.getHours();// 14constminutes=now.getMinutes();// 37// 如果你想表示“当前小时开始的时间戳”conststartOfHour=newDate(now);startOfHour.setMinutes(0,0,0);// 手动清零// 或者用 timestamp 计算(进阶)consttimestamp=now.getTime();constmsPerHour=60*60*1000;conststartTimestamp=Math.floor(timestamp/msPerHour)*msPerHour;

这里Math.floor确保我们落到“完整的小时前”,而不是四舍五入到下一小时。


四、和其他取整函数对比

JS 有好几个取整函数,别搞混了:

函数行为示例
Math.floor(x)向下取整(往 -∞ 方向)floor(-2.3) → -3
Math.ceil(x)向上取整(往 +∞ 方向)ceil(2.3) → 3,ceil(-2.3) → -2
Math.round(x)四舍五入round(2.5) → 3,round(-2.5) → -2
Math.trunc(x)直接去掉小数(向 0 取整)trunc(-2.3) → -2

💡 小测试:
Math.floor(-0.1)是多少?
答案:-1(因为 -1 < -0.1,且是最大整数)


五、常见误区

❌ 误区1:“floor 就是去掉小数”

对正数成立,但对负数不成立!-2.1去掉小数是-2,但floor-3

❌ 误区2:“和 parseInt 一样”

parseInt是字符串解析,遇到非数字字符就停:

parseInt("3.9abc")// → 3Math.floor("3.9abc")// → NaN(因为 "3.9abc" 转数字是 NaN)

✅ 正确姿势:

  • 明确你要的是“数学上的向下取整” → 用Math.floor
  • 输入确保是数字(或用Number()转换)

六、总结:一句话记住它

Math.floor(x)就是“不大于 x 的最大整数”,永远往数轴左边走。

它不是魔法,而是数学规则的忠实执行者。在需要确定性取整的场景(尤其是随机数、分页、坐标计算),它是你的首选工具。


七、动手试试!

打开浏览器控制台,运行这些代码,观察结果:

console.log(Math.floor(4.999));// ?console.log(Math.floor(-1.1));// ?console.log(Math.floor(0));// ?console.log(Math.floor(NaN));// ?// 随机整数练习for(leti=0;i<5;i++){console.log(Math.floor(Math.random()*6)+1);// 模拟骰子 1~6}

你会发现,Math.floor虽然简单,但可靠、明确、无歧义——这正是好代码的基础。

下次再想“砍掉小数”,别犹豫,直接Math.floor走起!🔢

http://www.rkmt.cn/news/93411.html

相关文章:

  • 终极Unity材质球合集:800+专业级游戏开发资源
  • CTF竞赛环境终极搭建指南:从零到精通的完整解决方案
  • Supabase CLI 7个高效工具:从零到精通的后端开发利器
  • TextFSM终极指南:高效解析半结构化文本数据的Python利器
  • AI飞船生成终极指南:5分钟掌握3大实战技巧
  • 150万中文问答数据集实战指南:baike2018qa赋能智能应用开发
  • Logto身份认证系统入门指南:从零构建安全登录体系
  • 5分钟快速上手AI动画生成:音频驱动人脸制作完整指南
  • huggingface_hub 1.0 正式版现已发布:开源机器学习基础五周年回顾
  • 2025年专业起名老师推荐:权威榜单TOP5深度解析与推荐 - 品牌推荐
  • 图书馆管理系统 - 测试报告
  • 2025沉淀硬化不锈钢供应商TOP5权威推荐:精密定制与服务 - 工业推荐榜
  • 2025年专业起名老师推荐:权威榜单TOP5老师深度解析 - 品牌推荐
  • python —— 单链表的实现
  • 斯大林排序:一个让你重新思考算法本质的幽默实验
  • IOT工程——电源入门系列-第三章
  • Bananas屏幕共享工具完整使用指南:简单快速的跨平台协作方案
  • 使用wsl编译buildroot---泰山派踩坑记录
  • 2025最新爆火!9款免费AI论文神器实测,限时公开开题报告与大纲生成全攻略! - 麟书学长
  • 终极企业网站模板:Start Bootstrap Modern Business完全指南
  • AI如何助力打造智能学习导航系统
  • 2025年四季度表面污染检测仪行业供应商综合实力盘点 - 品牌推荐大师
  • 2025不锈钢管制造商TOP5权威推荐:甄选优质企业,助力工 - 工业品牌热点
  • 2025年年终品牌证明推荐:从方法论到实效证据的全方位对比,附不同企业需求下的5家机构适配清单 - 品牌推荐
  • Folo翻译功能终极指南:轻松跨越语言障碍的完整方案
  • 2025年年终销量第一证明机构推荐:不同企业生命周期下的匹配策略及核心服务商推荐 - 品牌推荐
  • 2025年年终品牌证明推荐:从方法论到实效证据的全方位横评,附不同需求场景下的5家服务商清单 - 品牌推荐
  • 31、AJAX技术全解析:从基础到应用
  • Basdonax AI RAG移动端适配终极指南:打造随时可用的智能文档助手
  • 如何快速上手CogAgent:从零开始的终极部署指南