许多程序中的一项常见任务是将字节数(例如从驱动器容量或文件大小)转换为更具人类可读性的形式。考虑将150000000000字节看作“150 GB”或“139.7 GiB”更具可读性。以字符串格式化数据数量/容量
是否有任何库包含执行这些转换的功能?在Python中?在C?在伪代码?是否有关于“最具可读性”形式的最佳做法,如重要字符的数量,精度等?
许多程序中的一项常见任务是将字节数(例如从驱动器容量或文件大小)转换为更具人类可读性的形式。考虑将150000000000字节看作“150 GB”或“139.7 GiB”更具可读性。以字符串格式化数据数量/容量
是否有任何库包含执行这些转换的功能?在Python中?在C?在伪代码?是否有关于“最具可读性”形式的最佳做法,如重要字符的数量,精度等?
嗯,我通常会去为这个:
<?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太多,我想你经常在网页上。 – 2010-11-15 05:35:13
这是一个使用对数来决定文件的大小单位指数的方法:
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。循环在这里没有地方 – 2010-11-15 05:25:06
请注意,你已经混淆了你的SI和IEC符号值。语言也是不错的选择。 – 2010-11-15 05:33:56
@Matt - 修正二进制前缀 – fmark 2010-11-15 08:07:22
我不知道有这样的事,作为最佳实践在这里,但也有一些问题需要考虑。有两个问题需要回答:
关于使用单位,有两个指导原则。首先,总是使用适当的binary prefix,所以至少你的用户可以弄清楚发生了什么。其次,遵循最少突击的原则,并且使用您的问题域中常见的任何单位。因此,如果您要在Windows上报告文件大小,请使用base-1024,因为这是Windows使用的。如果您报告RAM大小,请使用base-1024,因为总是报告RAM大小。如果您报告的是硬盘大小,请使用base-1000,因为这是通常报告的方式。
关于精度,我认为这是一个判断呼叫。我不愿意报告多个有效数字,因为在任何需要更高精度的情况下,字节数是您要报告的度量。
1有效数字?! – 2010-11-15 09:15:02
另请参阅:http://stackoverflow.com/questions/1094841/reusable-library-to-get-human-readable-version-of-file-size – fmark 2010-11-15 06:01:12