誰かがこれに似たコードを共有しているのを見ました。任意の大きな数値をサポートする非常に単純なコードを共有します。
- 関数 formatFileSize($fileSize)
- {
- $unit = array(' Bytes', ' KB', ' MB', ' GB', ' TB', ' PB', ' EB', ' ZB', ' YB');
- $i = 0;
-
- /*
- while($fileSize >= 1024 && $i {
- $fileSize /= 1024;
- ++$i;
- }
- * /
-
- /*
- 上記のコードは最適化することもできます
- コンピューターは割り算よりも乗算の方が速いため
- */
- $inv = 1 / 1024;
-
- while($fileSize >= 1024 && $i < 8)
- {
- $fileSize *= $inv;
- ++$i;
- }
-
- // return sprintf("%.2f", $fileSize) . $unit[$i];
-
- // 前の結果を次のように修正します。整数ですが、出力は意味のない小数点以下 2 桁の 0 を含む浮動小数点数です
- $fileSizeTmp = sprintf("%.2f", $fileSize);
-
- // 次のコードの結果は 99.99% の場合正しいでしょう。 , 「超大きな数字」を使わない限り。 :)
- return ($fileSizeTmp - (int)$fileSizeTmp ? $fileSizeTmp : $fileSize) .
- }
コードをコピーします
//テストコード- echo formatFileSize(43453765345) // 結果: 40.47 GB
-
- echo formatFileSize(4345376534545643543633655244525); // 結果: 3594411.22 YB
-
- echo formatFileSize(2048) // 結果: 2 KB
- ;
コードをコピー
|