【问题标题】: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
鉴于它是文件大小,您想要的值可能是第一个。