将数据量/容量格式化为字符串

时间:2010-11-15 02:31:16

标签: python c readability stringification

许多程序中的常见任务是将字节数(例如来自驱动器容量或文件大小)转换为更易读的形式。将150000000000个字节视为“150 GB”或“139.7 GiB”更具可读性。

是否有任何库包含执行这些转换的功能?在Python?在C?在伪代码?是否有关于“最易读”形式的最佳实践,例如重要字符数,精度等?

3 个答案:

答案 0 :(得分: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])

答案 1 :(得分:1)

我不确定这里有什么最好的做法,但有一些问题需要考虑。您需要回答两个问题:

  1. 使用base-1000或base-1024单位是否合适?
  2. 什么时候精度开始变得多余?
  3. 关于单位的使用,有两个指导方针。首先,始终使用适当的binary prefix ,因此至少您的用户可以弄清楚发生了什么。其次,遵循最少惊喜的原则,使用您的问题域中常见的任何单位。因此,如果您在Windows上报告文件大小,请使用base-1024,因为这是Windows使用的。如果要报告RAM大小,请使用base-1024,因为这是始终报告RAM大小的方式。如果要报告硬盘大小,请使用base-1000,因为这是通常报告的方式。

    关于精确度,我认为这是一个判断。我不愿报告多个有效数字,因为在需要更高精度的任何情况下,字节数是您要报告的度量。

答案 2 :(得分: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];
?>

希望这有帮助!