1. ホーム
  2. ジャバスクリプト

[解決済み】ファイルサイズ(バイト)を人間が読める文字列に変換する方法

2022-03-29 04:16:15

質問

この関数を使って、バイト単位のファイルサイズを人間が読みやすいファイルサイズに変換しています。

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で割ると精度が落ちるような気がするのですが。私は完全に何かを誤解しているのでしょうか、それとももっと良い方法があるのでしょうか?

どのように解決するのですか?

2進法か10進法のどちらを使うかによって異なります。

例えば、RAMは常に2進数で計測されるので、1551859712を〜1.4GiBと表現するのが正しいでしょう。

一方、ハードディスクメーカーは10進数を使いたがるので、「~1.6GB」と呼ぶでしょう。

また、フロッピーディスクはこの2つの方式が混在しており、1MBは実際には1024000バイトであるため、混乱しやすい。