Я нахожусь в положении, когда пытаюсь преобразовать гигабайты в байты из формы отправки. Я искал вокруг, и я не могу найти что-нибудь подходящее. В настоящее время при преобразовании байтов в гигабайты я использую этот метод, который отлично работает.
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
двумя методами. Может ли кто-нибудь предложить более стабильный метод преобразования гигабайт в байты.
Ну есть два разных символа единицы, десятичные и двоичные. Как вы можете видеть здесь, десятичное умножение на 1000 и двоичное на 1024. так что если вы используете "B" (байт), просто выполните что-то вроде:
$bytenumber=$giga*pow(1024,3);
если используется "b" (бит):
$bitnumber=$giga*pow(1000,3);
PS: $ giga - ваш номер гиги.
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
Но, конечно, многие клиенты действительно не хотят получить правильный ответ, они хотят ИХ ответ. Вам решать.
Вы можете получить только точные значения преобразования, поскольку после десятичного разряда есть числа. Если вы начнете с 1.29634 концертов, вы получите более точное представление об этом фактическом байтовом значении по сравнению с его именем 1.3 Gigs. Это то, что вам нужно?