3

多くのプログラムで共通のタスクは、バイト カウント (ドライブ容量やファイル サイズなど) をより人間が読める形式に変換することです。150000000000 バイトは、「150 GB」または「139.7 GiB」と読みやすいと考えてください。

これらの変換を実行する機能を含むライブラリはありますか? パイソンで?Cで?疑似コードで?有効文字数、精度など、「最も読みやすい」形式に関するベスト プラクティスはありますか?

4

3 に答える 3

7

対数を使用してファイル サイズの単位指数を決定する方法を次に示します。

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])
于 2010-11-15T03:51:24.660 に答える
1

ここにベストプラクティスなどがあるかどうかはわかりませんが、考慮すべき問題がいくつかあります。答える必要のある2つの質問があります。

  1. base-1000またはbase-1024ユニットを使用するのが適切ですか?
  2. 精度が冗長になり始めるのはいつですか?

ユニットの使用に関しては、2つのガイドラインがあります。まず、少なくともユーザーが何が起こっているのかを理解できるように、常に適切なバイナリプレフィックスを使用してください。第二に、驚き最小の原則に従い、問題のドメインで一般的な単位を使用します。したがって、Windowsでファイルサイズを報告する場合は、Windowsが使用するようにbase-1024を使用します。RAMサイズを報告する場合は、base-1024を使用してください。これは、RAMサイズが常に報告される方法です。ハードディスクのサイズを報告する場合は、base-1000を使用してください。これは、一般的に報告される方法です。

精度に関しては、これは判断の呼びかけだと思います。より高い精度が要求される状況では、バイト数が報告したい測定値であるため、私は複数の有効数字を報告することを嫌います。

于 2010-11-15T08:02:04.413 に答える
0

まあ、私は通常これに行きます:

<?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];
?>

お役に立てれば!

于 2010-11-15T02:35:12.590 に答える