Конвертировать гигабайты в байты

0

Я нахожусь в положении, когда пытаюсь преобразовать гигабайты в байты из формы отправки. Я искал вокруг, и я не могу найти что-нибудь подходящее. В настоящее время при преобразовании байтов в гигабайты я использую этот метод, который отлично работает.

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, это, по-видимому, представляет собой разницу между 1610612736 двумя методами. Может ли кто-нибудь предложить более стабильный метод преобразования гигабайт в байты.

  • 0
    «Результат 12992276070» --- почему вы так думаете?
  • 0
    Да ... в вашем тесте вы, похоже, используете 12.1, а не 1.5
Теги:

3 ответа

1

Ну есть два разных символа единицы, десятичные и двоичные. Как вы можете видеть здесь, десятичное умножение на 1000 и двоичное на 1024. так что если вы используете "B" (байт), просто выполните что-то вроде:

$bytenumber=$giga*pow(1024,3);

если используется "b" (бит):

$bitnumber=$giga*pow(1000,3);

PS: $ giga - ваш номер гиги.

  • 0
    Итак, первый - это именно то, что уже есть у OP: -S
  • 0
    Да, и я думаю, что ОП спрашивал предложение о стабильном методе. Мне жаль, если я был не прав. Я новичок в этом.
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

Но, конечно, многие клиенты действительно не хотят получить правильный ответ, они хотят ИХ ответ. Вам решать.

0

Вы можете получить только точные значения преобразования, поскольку после десятичного разряда есть числа. Если вы начнете с 1.29634 концертов, вы получите более точное представление об этом фактическом байтовом значении по сравнению с его именем 1.3 Gigs. Это то, что вам нужно?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню