每日一博 | JavaScript 字节单位换算函数【详解】
前言:我们在日常开发中,经常会遇到字节单位换算的场景。一般用简单的除法来计算时,都会遇到计算精度的问题。下面,我们着重要将的是一种精确字节单位换算的详解:
1. 先看代码
const byteConvert = function(bytes) { if (isNaN(bytes)) { return ''; } let symbols = ['bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; let exp = Math.floor(Math.log(bytes)/Math.log(2)); if (exp < 1) { exp = 0; } let i = Math.floor(exp / 10); bytes = bytes / Math.pow(2, 10 * i); if (bytes.toString().length > bytes.toFixed(2).toString().length) { bytes = bytes.toFixed(2); } return bytes + ' ' + symbols[i]; }; // 函数调用 byteConvert(bytes); 复制代码
这段代码很好用,而且也是网上普遍流传的一种方法,我们下面就详细了解一下,为什么这段代码可以实现这种效果呢?
我们可以看到,这个函数中的核心运算是对数运算和指数运算,JavaScript 中的 Math.log()
函数是对数运算,需要强调的一点是,它是自然对数运算(以 e
为底)。
我们都知道,1024 = 2^10
,那么进行对数运算就会变为:
接下来就需要理解这行核心代码了:let exp = Math.floor(Math.log(bytes)/Math.log(2));
。理解它之前,我们需要搬出来对数运算的一个重要推论——换底公式,如下:
现在是不是很明了了,Math.log(bytes)/Math.log(2)
其实就是再求 bytes
以 2 为底的指数,我们换算一下,如下:
最后的 exp
就是我们得到的指数了。exp 为 10 时,bytes 就是 1024。所以后面的运算都是依据 10 这个单位量来计算的。i 为 1 就是最起码有一个 KB 的量级了,i 为 2 就是最起码有一个 MB 的量级,等等类推,后续做了一些保留小数位的优化等等,就不再赘述了,欢迎大家共同交流类似有趣的代码~~
最后
如果你觉得此文对你有一丁点帮助,点个赞。或者可以加入我的开发交流群:1025263163相互学习,我们会有专业的技术答疑解惑
如果你觉得这篇文章对你有点用的话,麻烦请给我们的开源项目点点star:http://github.crmeb.net/u/defu不胜感激 !

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
GNOME 41.1 发布
GNOME 41.1 现已推出。这是 GNOME 41 的稳定错误修复版本,官方鼓励所有搭载 GNOME 41 的操作系统进行升级。新版本引入了新的 Calls 和 Connections apps、重新设计的软件应用、新的多任务和移动连接设置、以及增强的电源管理功能等。 根据介绍,新版本中的一些更新内容包括有: GNOME 41.1 进一步改进了 GNOME Shell 以便在应用图标被隐藏时进行更新,改进 GTK 颜色选择器支持、改进高对比度开关、一次只允许打开一个 GNOME 扩展程序的实例、改进 GTK 应用程序中不稳定的滚动、并改进通知中的声音文件支持。 GNOME Settings app不再裁剪(所有新的)鼠标和触摸板插图;修复了在设置 APN 后未启用数据的问题;并对电源按钮动作行为使用正确的翻译。 新的 GNOME Connections 应用程序现在改进了对不完整地址的解析、防止搜索功能窃取显示 key-press 事件、向桌面文件中的 Exec 键添加参数、并在应用程序端绘制 RDP 缩略图。 当固件更新失败时,GNOME 软件不再建议重新启动。 允许用户搜索...
- 下一篇
Motor Admin —— 无代码管理面板
Motor Admin是一个自托管的、开源的、无代码管理面板和商业智能软件。可在不到一分钟的时间内为你的应用程序部署一个无代码的管理面板。 使用一个方便的用户界面搜索、创建、更新和删除数据条目。创建复杂的自定义操作,如通过 API 集成向你的客户发送自动电子邮件。用 SQL 建立自定义报告,并通过图表将结果可视化。将单个报告合并成一个仪表盘,并与你的团队分享。 特性: 可定制的 CRUD 自定义操作 表单生成器 SQL 查询 数据可视化 仪表盘 电子邮件提醒 情报搜索 针对移动设备进行了优化 Pro 角色和权限控制 多数据库支持 审计日志 实时协作 多重身份验证 自定义样式 通过 Slack 的个性化报告警报 全文检索 条纹集成 可共享的表格和报告 了解更多
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Red5直播服务器,属于Java语言的直播服务器
- CentOS关闭SELinux安全模块
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2更换Tomcat为Jetty,小型站点的福音