Конвертировать Гигабайт = Терабайт

KotOFF

Новичок
Помогите упростить код:
PHP:
function changeType($sum){
    if($sum < 1000){
        return $sum." Гб";
    }
    elseif($sum == 1000){
        return "1 Tб";
    }
    else{
        if($sum < 2000){
            $new = ($sum - 1000);
            return "1 Tб ".$new." Гб";
        }
        elseif($sum == 2000){
            return "2 Tб";
        }
        else{
            if($sum < 3000){
                $new = ($sum - 2000);
                return "2 Tб ".$new." Гб";
            }
            elseif($sum == 3000){
                return "3 Tб";
            }
            else{
                $new = ($sum - 3000);
                return "3 Tб ".$new." Гб";
            }
        }
    }
}
echo changeType(1099);
Может как то через цикл реализовать(Потому что число может быть и 20999)? Ps.. в функцию попадают только целые числа, то есть ГБ = целое число!
 

atWare

Новичок
PHP:
function DecimalSize($int){
$gigabyte=floor($int/1000); 
$var=$int-($gigabyte*1000);
$output= "Заданное число меньше 1 Гб";
if ($gigabyte >0 && $var > 0 ){
    $output= "$gigabyte Tб ".$var." Гб";
}elseif($gigabyte >0 && $var == 0){
    $output=  "$gigabyte Tб";
}
return $output;
}
echo DecimalSize(20999);
Никакой цикл вообще не нужен.
 
Последнее редактирование:

KotOFF

Новичок
PHP:
function DecimalSize($int){
$gigabyte=floor($int/1000);
$var=$int-($gigabyte*1000);
$output= "Заданное число меньше 1 Гб";
if ($var > 0 ){
    $output= "$gigabyte Tб ".$var." Гб";
}else{
    $output=  "$gigabyte Tб";
}
return $output;
}
echo DecimalSize(20999);
Никакой цикл вообще не нужен.
а если надо будет подставлять число с запятой, то есть echo DecimalSize(20999.7)
 

atWare

Новичок
а если надо будет подставлять число с запятой, то есть echo DecimalSize(20999.7)
Задача была упростить, а не написать полностью разбиралку вплоть до байта =)
Это тоже можно сделать. Без цикла. И да. Я вчера функцию исправил. Не учел момента, что могут и число меньше мегабайта вставить
 

atWare

Новичок
Вчера поспешил.
PHP:
function DecimalSize($int){
$gigabyte=floor($int/1000);
$var=$int-($gigabyte*1000);
$output= "Заданное число меньше 1 Гб";
if ($gigabyte >0 && $var > 0 ){
    $output= "$gigabyte Tб ".$var." Гб";
}elseif($gigabyte >0 && $var == 0){
    $output=  "$gigabyte Tб";
}elseif($gigabyte ==0 && $int<1000){
    $output=  "$int Гб";}
return $output;
}
Окончательно
 

WMix

герр M:)ller
Партнер клуба
PHP:
function convertDataUnit( $size, $src_unit = 'B', $tgt_unit = 'YB' ) {
    $units = ['bit', 'B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];

    $src_exp = array_search($src_unit, $units);
    $tgt_exp = array_search($tgt_unit, $units);

    if( $src_exp <= $tgt_exp ) {
        for( $i = $src_exp; $size >= 1024; $i++ ) {
            if( $i === 0 ) {
                $size /= 8;
            } else {
                $size /= 1024;
            }
        }
    } else {
        for( $i = $src_exp; $i > $tgt_exp; $i-- ) {
            if( $i === 1 ) {
                $size *= 8;
            } else {
                $size *= 1024;
            }
        }
    }
    return round( $size, 2 ) . ' ' . $tgt_unit;
}
echo convertDataUnit(1099, 'GB','TB');
 

atWare

Новичок
PHP:
function ConvertBytes($size, $precision = 0, $InUnit="B",$OutUnit="B") {
    $powTypes=array('B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
    $InputUnit=array_keys($powTypes,$InUnit)[0];
    $OutputUnit=array_keys($powTypes,$OutUnit)[0];
    $oSize=max($size,0) * pow(1024, ($InputUnit-$OutputUnit));
    $oFraction=explode(".",fmod($oSize,1));
    if($InputUnit<$OutputUnit){
     if(isset($oFraction[1])){
     $precision=mb_strlen($oFraction[1], 'utf8');
      }
    }
    return number_format($oSize , $precision, '.', '') . ' ' .$powTypes[$OutputUnit] ;
}
echo ConvertBytes(16,2,"KB","MB"); // 0.015625 MB
echo ConvertBytes(16,2,"MB","KB"); //16384.00 KB
Так считает даже если надо килобайты в мегабайты переводить. И... никакого цикла. Работает с 5.4* PHP
 
Последнее редактирование:
Сверху