我正处于尝试从提交表单将千兆字节转换为字节的位置。我四处搜寻,我找不到合适的东西。 目前,在将字节转换为千兆字节时,我使用此方法,该方法非常有效。
public function byteFormat($bytes, $unit = "", $decimals = 2)
{
$units = array('B' => 0, 'KB' => 1, 'MB' => 2, 'GB' => 3, 'TB' => 4,
'PB' => 5, 'EB' => 6, 'ZB' => 7, 'YB' => 8);
$value = 0;
if ($bytes > 0) {
// Generate automatic prefix by bytes
// If wrong prefix given
if (!array_key_exists($unit, $units)) {
$pow = floor(log($bytes)/log(1024));
$unit = array_search($pow, $units);
}
// Calculate byte value by prefix
$value = ($bytes/pow(1024,floor($units[$unit])));
}
// If decimals is not numeric or decimals is less than 0
// then set default value
if (!is_numeric($decimals) || $decimals < 0) {
$decimals = 2;
}
// Format output
return sprintf('%.' . $decimals . 'f '.$unit, $value);
}
似乎有很多其他格式的字节示例,但不是相反。
我已经看到我可以像这样转换数字1.5
round(($number[0] * 1073741824));
结果是12992276070
,但是,当使用上面显示的byteformat方法时,我得到以下1610612736
,这两个方法之间似乎有很大区别。
任何人都可以建议一个更稳定的方法来将千兆字节转换为字节。
答案 0 :(得分:1)
有两个不同的单位符号,十进制和二进制。 如您所见here,十进制乘法乘以1000,二进制乘以1024。 因此,如果您使用“B”(字节),只需执行以下操作:
$bytenumber=$giga*pow(1024,3);
如果使用“b”(位):
$bitnumber=$giga*pow(1000,3);
P.S:$ giga是你的千兆数字。
答案 1 :(得分:0)
您只能获得与小数点后的数字一样准确的转换。如果你从1.29634演出开始,你将更接近于它的实际字节值,而不是称它为1.3 Gigs。这就是你追求的目标吗?
答案 2 :(得分:0)
numberOfBytes = round (numberOfGb * 1073741824)
是您问题的确切答案。看来,你算错了。尝试在计算器上查看它。
另一个问题是,如果你有2位数的来源数,那么给出多于或少于2位数的答案是不正确的。正确的计数将是:
source: 1.5GB
counting: 1.5GB*1073741824 B/GB= 1610612736 B
rounding to the last significant digit: 1610612736 B ~= 1.6e9 B
answer: 1.6e9 B
但是,当然,许多客户并不真正想要正确答案,他们希望得到答案。由你来决定。