使用 npm package filesize 将字节转换为人类可读的大小

byte to human readable size with npm package filesize

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

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

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

9.77 GB 好像是错的。当我使用 google 转换器在线转换它时,我得到:

10485760000 字节 = 10,48576 千兆字节

为什么这个包的行为是这样的?

The term gigabyte is commonly used to mean either 1000^3 bytes or 1024^3 bytes.

来源:Wikipedia

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

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

Run in Runkit

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

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

当开发数字基地 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

你想要的值可能是第一个,因为它是一个文件大小。