将千兆字节转换为字节

时间:2015-02-20 07:54:49

标签: php

我正处于尝试从提交表单将千兆字节转换为字节的位置。我四处搜寻,我找不到合适的东西。 目前,在将字节转换为千兆字节时,我使用此方法,该方法非常有效。

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,这两个方法之间似乎有很大区别。 任何人都可以建议一个更稳定的方法来将千兆字节转换为字节。

3 个答案:

答案 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

但是,当然,许多客户并不真正想要正确答案,他们希望得到答案。由你来决定。