小编典典

将文件大小(以字节为单位)转换为人类可读的字符串

all

我正在使用此函数将文件大小(以字节为单位)转换为人类可读的文件大小:

function getReadableFileSizeString(fileSizeInBytes) {
    var i = -1;
    var byteUnits = [' kB', ' MB', ' GB', ' TB', 'PB', 'EB', 'ZB', 'YB'];
    do {
        fileSizeInBytes = fileSizeInBytes / 1024;
        i++;
    } while (fileSizeInBytes > 1024);

    return Math.max(fileSizeInBytes, 0.1).toFixed(1) + byteUnits[i];
};

但是,这似乎不是 100% 准确的。例如:

getReadableFileSizeString(1551859712); // output is "1.4 GB"

这不应该"1.5 GB"吗?似乎除以 1024 正在失去精度。我完全误解了什么还是有更好的方法来做到这一点?


阅读 69

收藏
2022-04-18

共1个答案

小编典典

这取决于您要使用二进制还是十进制约定。

例如,RAM 始终以二进制测量,因此将 1551859712 表示为 ~1.4GiB 是正确的。

另一方面,硬盘制造商喜欢使用十进制,所以他们称之为~1.6GB。

只是为了混淆,软盘混合使用了两个系统——它们的 1MB 实际上是 1024000 字节。

2022-04-18