多くのプログラムで共通のタスクは、バイト カウント (ドライブ容量やファイル サイズなど) をより人間が読める形式に変換することです。150000000000 バイトは、「150 GB」または「139.7 GiB」と読みやすいと考えてください。
これらの変換を実行する機能を含むライブラリはありますか? パイソンで?Cで?疑似コードで?有効文字数、精度など、「最も読みやすい」形式に関するベスト プラクティスはありますか?
多くのプログラムで共通のタスクは、バイト カウント (ドライブ容量やファイル サイズなど) をより人間が読める形式に変換することです。150000000000 バイトは、「150 GB」または「139.7 GiB」と読みやすいと考えてください。
これらの変換を実行する機能を含むライブラリはありますか? パイソンで?Cで?疑似コードで?有効文字数、精度など、「最も読みやすい」形式に関するベスト プラクティスはありますか?
対数を使用してファイル サイズの単位指数を決定する方法を次に示します。
from math import log
byteunits = ('B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB')
def filesizeformat(value):
exponent = int(log(value, 1024))
return "%.1f %s" % (float(value) / pow(1024, exponent), byteunits[exponent])
ここにベストプラクティスなどがあるかどうかはわかりませんが、考慮すべき問題がいくつかあります。答える必要のある2つの質問があります。
ユニットの使用に関しては、2つのガイドラインがあります。まず、少なくともユーザーが何が起こっているのかを理解できるように、常に適切なバイナリプレフィックスを使用してください。第二に、驚き最小の原則に従い、問題のドメインで一般的な単位を使用します。したがって、Windowsでファイルサイズを報告する場合は、Windowsが使用するようにbase-1024を使用します。RAMサイズを報告する場合は、base-1024を使用してください。これは、RAMサイズが常に報告される方法です。ハードディスクのサイズを報告する場合は、base-1000を使用してください。これは、一般的に報告される方法です。
精度に関しては、これは判断の呼びかけだと思います。より高い精度が要求される状況では、バイト数が報告したい測定値であるため、私は複数の有効数字を報告することを嫌います。
まあ、私は通常これに行きます:
<?php
$factor = 0;
$units = ['B','KiB','MiB','GiB','TiB']
while( $size > 1024 && $factor<count($units-1)) {
$factor++;
$size /= 1024; // or $size >>= 10;
}
echo round($size,2).$units[$factor];
?>
お役に立てれば!