JavaScript 字节单位换算函数

业务场景:

内存使用量的展示,数据是以Mb为单位的,接口里是类似"1234567890"这样的数据,不便于用户理解,需要前端转换成"1.15PB"这样的展示。考虑到业务中还会有很多相同的场景,所以就写了一个工具函数:

/**
 * byte单位换算
 * @param originNum 要换算单位的数
 * @param basic 传入num的基础单位 默认是MB
 * @param pointIndex 保留小数位数 默认保留两位小数
 * @param symbols 单位列表
 * @returns {String}
 * @example byteConvert(25088.00,'Mb',2) 24.50GB
 */
export function byteConvert (originNum = 0, basic = 'MB', pointIndex = 2, symbols = ['bytes', 'KB', 'MB', 'GB', 'TB', 'PB']) {
  if (isNaN(Number(originNum)) || Number(originNum) === 0) return 0 + basic;
  const num = Number(originNum) > 0 ? Number(originNum) : Number(-1 * originNum);
  const exp = Math.floor(Math.log(num)/Math.log(1024)); // 利用换底公式
  const index = symbols.findIndex((ele) => ele === basic);
  const symbolsLength = symbols.length;
  let number,unit;
  if(index < 0) {
      throw new Error(`传入单位必须是${symbols}中的值`);
  } else if ((exp + index) > symbolsLength - 1){
      number = (num / Math.pow(1024, symbolsLength - 1 - index)).toFixed(pointIndex);
      unit = symbols[symbolsLength - 1];
  } else {
      number = (num / Math.pow(1024, exp)).toFixed(pointIndex);
      unit = symbols[exp + index];
  }
  const outputNum = Number(originNum) > 0 ? Number(number).toLocaleString() : ('-' + Number(number).toLocaleString());
  return outputNum + ' ' + unit;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言:我们在日常开发中,经常会遇到字节单位换算的场景。一般用简单的除法来计算时,都会遇到计算精度的问题。有关 Ja...
    唐小狼阅读 2,972评论 0 0
  • 佛说: 执念太深,终成魔障。 怨念太浅,终是无情。 一念成魔,一念成佛。 阿绣日日都以各种理由找灵均,不是说家...
    玉面公子1015阅读 7,641评论 0 1
  • 泛清苕•谒锦州奉国寺 避世空门。奉国庙堂深,岁月留痕。 辽西韵,契丹骨,千年筑,佛祖蒙尘。 频遭劫难...
    平江耀华阅读 2,563评论 0 8
  • 希望你继续爱吃,开心,爱哼哼(「・ω・)「嘿
    孙小抠阅读 1,094评论 0 0
  • 对自己的书法一直不太满意,年轻的时候没找对方法和教材,现在工作忙了又没有总觉得没有时间。不过,凡事总是相对的,时间...
    但行耕者阅读 2,662评论 0 1

友情链接更多精彩内容