尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

别再用 parseInt 乱砍小数了!来认识 JS 的“地板函数”:Math.floor
📅 发布时间:2026/6/18 2:21:38

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

  • 生成一个随机整数(比如 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走起!🔢

相关新闻

  • 终极Unity材质球合集:800+专业级游戏开发资源
  • CTF竞赛环境终极搭建指南:从零到精通的完整解决方案
  • Supabase CLI 7个高效工具:从零到精通的后端开发利器

最新新闻

  • 揭秘AI写专著:AI专著写作工具大推荐,20万字专著轻松搞定!
  • 终极指南:如何在macOS上使用Whisky高效运行Windows应用
  • AI治理利益相关方分析:动态权力网络的实战测绘方法
  • Windows 11系统优化深度指南:Win11Debloat工具专业使用手册
  • 2026嘉兴买宠必看!南湖3家老牌猫犬舍实测,梅雨季养宠不生病秘诀✅ - 萌宠俱乐部
  • 深入理解Linux终端控制:tcgetattr与termios结构体实战指南

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号