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

Posted

技术标签:

【中文标题】将数据数量/容量格式化为字符串【英文标题】:Formatting data quantity/capacity as string 【发布时间】:2010-11-15 02:31:15 【问题描述】:

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

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

【问题讨论】:

另见:***.com/questions/1094841/… 【参考方案1】:

这是一种使用对数来确定文件大小单位指数的方法:

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])

【讨论】:

请注意,您混淆了 SI 和 IEC 符号值。语言的选择也不错。 @Matt - 修复二进制前缀【参考方案2】:

我不确定这里是否存在最佳实践,但有一些问题需要考虑。您需要回答两个问题:

    是否适合使用 base-1000 或 base-1024 单位? 精度什么时候开始变得多余?

关于单位的使用,有两个准则。首先,始终使用适当的binary prefix,这样至少您的用户可以弄清楚发生了什么。其次,遵循最小意外原则,使用您的问题领域中常见的任何单位。因此,如果您在 Windows 上报告文件大小,请使用 base-1024,因为这是 Windows 使用的。如果您要报告 RAM 大小,请使用 base-1024,因为这是始终报告 RAM 大小的方式。如果您要报告硬盘大小,请使用 base-1000,因为这是通常报告的方式。

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

【讨论】:

【参考方案3】:

好吧,我通常会这样做:

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

希望这会有所帮助!

【讨论】:

请注意,您混淆了 SI 和 IEC 符号值。我很少看到 PHP,我猜你经常在网页上看到。

以上是关于将数据数量/容量格式化为字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何将数字格式化为一定数量的小数位加逗号分隔符?

将字符串格式化为仅在 python 中的单词之间有 n 个空格

如何通过将字符串格式化为 django 模板来显示数据?

如何通过添加零将文本数据格式化为 6 个字符?

Oracle数据库中如何将字符串格式化为日期

将字符串格式化为日期时间