Ver Mensaje Individual
  #4 (permalink)  
Antiguo 16/07/2003, 08:40
leonardop
 
Fecha de Ingreso: julio-2003
Mensajes: 165
Antigüedad: 20 años, 9 meses
Puntos: 1
Hola,

Antes que nada, y como ya lo mencionó nuestro amigo, quisiera apuntar que el ejemplo que mencionas al final de tu mensaje tiene un resultado correcto (o al menos más cerca del valor correcto de lo que aparentemente piensas). 201545728 bytes son aproximadamente 192 megabytes.

Recuerda que:

Código:
1024  b = 1 kb
1024 kb = 1 mb
1024 mb = 1 gb
etc.
Ahora bien, si realmente quieres obtener otra forma, quizás más simple, corta, elegante, etc. de escribir el algoritmo que has copiado en tu mensaje, se mo ocurre algo como esto:

Código:
<?php

$tam = 201545728;  // Tamanyo original sobre el que se desea operar.


// Arreglo que asocia las unidades con una cantidad determinada de digitos.

$unidades = array ('GB' => 10, 'MB' => 7, 'KB' => 5);


// Se almacena la cantidad de digitos del valor original previamente

$digitos = strlen ($tam);


// foreach es una construccion del lenguaje PHP, version 4. En caso de
// no disponer de esta version, podria usarse el clasico for.

$tam_final = '';  // Variable en donde se almacena el resultado final.

foreach (array_keys ($unidades) as $unidad) {
    if ($digitos >= $unidades[$unidad]) {
        $tam_final = substr ($tam, 0, $digitos - $unidades[$unidad] + 1) .
                     " $unidad";
        break;
    }
}

if ($tam_final == '')
    $tam_final = '0 KB';


// Imprimir el resultado.

print "El tamaño despues de ser procesado es $tam_final";

?>

Nota que esta versión trata de ser completamente fiel al comportamiento original del código que has publicado. Este código en ciertas ocasiones produce resultados erróneos. Por ejemplo, si el valor original es 1024 (1 kb), el código produce el resultado "0 KB". Personalmente, creo que fue un error trivial que pasaste por alto cuando publicaste el código. Un arreglo simple sería modificar esta línea:

Código:
$unidades = array ('GB' => 10, 'MB' => 7, 'KB' => 5);
con esto:

Código:
$unidades = array ('GB' => 10, 'MB' => 7, 'KB' => 4);

Finalmente, una inquietud, ¿administras un sitio web que administra contenido publicado mediante ByteTorrent? Parece interesante. :)

Saludos.