使用npm包文件大小的字节到人类可读的大小

时间:2017-06-21 08:18:38

标签: javascript ecmascript-6 filesize

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

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

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

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

10485760000字节= 10,48576千兆字节

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

2 个答案:

答案 0 :(得分:3)

  

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

来源:Wikipedia

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

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

Run in Runkit

答案 1 :(得分:2)

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

  • 千(K):10 3 = 1,000
  • mega(M):10 6 = 1,000,000
  • 千兆(G):10 9 = 1,000,000,000

当开发数字基础2计算机时,他们发明了新的前缀。很快就达成了关于价值观的协议,但找到吸引人的名字并不容易。不幸的是,这些名字最终会传播到SI所在的地方,所以我们最终得到了一个很好的混淆:

  • 千(K):2 10 = 1,024
  • mega(M):2 20 = 1,048,576
  • 千兆(G):2 30 = 1,073,741,824

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

  • kibi(Ki):2 10 = 1,024
  • mebi(Mi):2 20 = 1,048,576
  • gibi(Gi):2 30 = 1,073,741,824

在计算机中,几乎所有东西都是2的幂,所以通常避免使用基于十进制的单位,因为它们永远不会是圆的。

在您的示例中,使用base 2和base 10前缀呈现:

  • 10485760000/2 30 = 9.765625 GiB
  • 10485760000/10 9 = 10.48576 GB

您想要的值可能是第一个给出的文件大小。