我从计算机中提取硬盘大小,然后使用PHP将其转换为人类可读的大小(E.G 750GB)
问题是,硬盘中的广告空间与硬盘的实际大小不一样,但我希望我的PHP显示广告的大小。
这是我的代码:
function formatBytes($size, $precision = 0) {
$base = log($size, 1024);
$suffixes = array('', 'KB', 'MB', 'GB', 'TB');
return round(pow(1024, $base - floor($base)), $precision) . $suffixes[floor($base)];
}
这是我在Stack上找到的代码。如果我为128GB
(128035676160 bytes
)硬盘提供字节,则实际显示119GB
。预期结果为128GB
。对于1TB硬盘,字节为1000204886016
,预期结果为1TB
或1000GB
,但实际上我得到931GB
。
一种可能的解决方案是在出现第一个0
时打破字节字符串,然后我应该得到预期的结果。 {1}为1tb,1
为128GB。我不确定这是否一直有效,并希望采用更安全的方式来执行此操作,因为这对我的软件很重要。
我无法想出这样做的合理方式,即使有可能。非常感谢任何有关此问题的帮助。
答案 0 :(得分:1)
当硬盘驱动器制造商以KB,MB,GB,TB等显示硬盘驱动器的大小时,实际上使用1000的功率(而不是1024的功率,RAM和计算机使用)。所以只需尝试使用1000而是。
要获得更深入的答案:https://en.wikipedia.org/wiki/Byte#Unit_multiples
(正如@domdom在评论中提到的那样)。