我正在使用此函数将文件大小(以字节为单位)转换为人类可读的文件大小:
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 正在失去精度。我完全误解了什么还是有更好的方法来做到这一点?
"1.5 GB"
这取决于您要使用二进制还是十进制约定。
例如,RAM 始终以二进制测量,因此将 1551859712 表示为 ~1.4GiB 是正确的。
另一方面,硬盘制造商喜欢使用十进制,所以他们称之为~1.6GB。
只是为了混淆,软盘混合使用了两个系统——它们的 1MB 实际上是 1024000 字节。