【问题标题】:byte to human readable size with npm package filesize使用 npm 包文件大小将字节转换为人类可读的大小
【发布时间】:2017-06-21 08:18:38
【问题描述】:

我需要将兆字节转换为适当的单位。

parseInt(10000) * 1024 * 1024 //10485760000 byte

filesize(parseInt(10000) * 1024 * 1024); // "9.77 GB"

9.77 GB 似乎是错误的。当我使用在线谷歌转换器转换它时,我得到:

10485760000 字节 = 10,48576 千兆字节

为什么这个包会有这样的行为?

【问题讨论】:

    标签: javascript ecmascript-6 filesize


    【解决方案1】:

    术语千兆字节通常用于表示 1000^3 字节或 1024^3 字节。

    来源:Wikipedia

    filesize 包默认使用 1024^3。您可以通过指定base 选项来更改它(默认为2):

    filesize(10000 * 1024 * 1024, { base: 10 }) // 10.49 GB
    

    Run in Runkit

    【讨论】:

      【解决方案2】:

      SI 单位(大部分)基于小数,它们的前缀也是如此:

      • 公斤 (K):103 = 1,000
      • 兆 (M): 106 = 1,000,000
      • 千兆 (G):109 = 1,000,000,000

      当数字 base 2 计算机被开发出来时,他们发明了新的前缀。很快就价值观达成了一致,但要找到吸引人的名字并不容易。不幸的是,这些名称最终传播到了 SI 的地方,所以我们最终陷入了混乱:

      • 公斤 (K):210 = 1,024
      • 兆 (M): 220 = 1,048,576
      • 千兆 (G):230 = 1,073,741,824

      然后,有人发明了一些新名字,可以说不如以前的名字那么糟糕,但为时已晚,几乎没有人使用它们:

      • 基比(Ki):210 = 1,024
      • mebi (Mi): 220 = 1,048,576
      • 吉比(Gi):230 = 1,073,741,824

      在计算机中,几乎所有内容都是 2 的幂,因此通常避免使用基于小数的单位,因为它们从不四舍五入。

      在您的示例中,使用以 2 为基数和以 10 为基数的前缀呈现:

      • 10485760000 / 230 = 9.765625 GiB
      • 10485760000 / 109 = 10.48576 GB

      鉴于它是文件大小,您想要的值可能是第一个。

      【讨论】:

      • 完美解释
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-09
      • 2012-05-12
      • 1970-01-01
      • 1970-01-01
      • 2011-04-15
      • 1970-01-01
      相关资源
      最近更新 更多