Enviar por e-mail
Imprimir
Foto por Dicemanic
A função byte_convert converte Byte em Kilobyte (KB), Megabyte (MB), Gigabyte (GB), Terabyte (TB), Petabyte (PB), Exabyte (EB), Zettabyte (ZB) e Yottabyte (YB). A menor unidade que a função pode retornar é Kilobyte (KB).
Como funciona?
Em um loop do..while o valor passado por parâmetro é dividido por 1024 ao menos uma vez e atualizado. A cada divisão o valor de $unit é incrementado, representando uma divisão sucedida e aumento na grandeza do número. Enquanto o número de Bytes for maior que 1024 o loop é executado. Finalmente o valor de $unit é substituído pela unidade de medida adequada e a função sprintf formata o valor que é retornado.
Teoricamente, o valor pode ser dividido até 9 vezes retornando Yottabytes. Se o valor for maior que 1237940039285380274899124224 (número de Bytes para 1024 Yottabytes) o valor retornado não terá unidade de medida.
byte_convert(750); // 0.73KB byte_convert(820, 5); // 0.80078KB byte_convert(1024); // 1.00KB byte_convert(2050, 4); // 2.0020KB byte_convert(6453290); // 6.15MB byte_convert(28031990); // 26.73MB byte_convert(281219901986); // 261.91GB byte_convert(98332457217617); // 89.43TB byte_convert(167864165487567, 9); // 152.671569128TB byte_convert(4878741278754572454); // 4.23EB byte_convert(787546742132165465745, 4); // 683.0879EB
Fórmula matemática
Para converter uma unidade acima divide-se por 1024 e para converter uma unidade abaixo multiplica-se por 1024.
Exemplo: 2000 bytes para Kilobytes, uma unidade acima, é 2000/1024 que resulta em aproximadamente: 1.95 KB.
1.2 GB para Megabytes, uma unidade abaixo, é 1.2 * 1024 que resulta em: 1228.8 MB.
Conversões
1 Byte = 8 Bit
1 Kilobyte = 1024 Bytes
1 Megabyte = 1048576 Bytes
1 Gigabyte = 1073741824 Bytes
1 Terabyte = 1099511627776 Bytes
1 Petabyte = 1125899906842624 Bytes
1 Exabyte = 1152921504606846976 Bytes
1 Zettabyte = 1180591620717411303424 Bytes
1 Yottabyte = 1208925819614629174706176 Bytes
Código fonte
/**
* @author Alejandro Fernandez Moraga
* @param integer $bytes Bytes
* @param integer $precision Número de casas de precisão
* @return string
*/
function byte_convert($bytes, $precision=2) {
$units = array('', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
$unit = 0;
do {
$bytes /= 1024;
$unit++;
} while ($bytes > 1024);
return sprintf("%1.{$precision}f%s", $bytes, $units[$unit]);
}
Comentar
RSS
RSS
Faleu pelo post, precisei isso muito para javascript entao converti seu codigo:
function format_number(pnumber,decimals){
if (isNaN(pnumber)) { return 0};
if (pnumber=='') { return 0};
var snum = new String(pnumber);
var sec = snum.split('.');
var whole = parseFloat(sec[0]);
var result = '';
if(sec.length > 1){
var dec = new String(sec[1]);
dec = String(parseFloat(sec[1])/Math.pow(10,(dec.length - decimals)));
dec = String(whole + Math.round(parseFloat(dec))/Math.pow(10,decimals));
var dot = dec.indexOf('.');
if(dot == -1){
dec += '.';
dot = dec.indexOf('.');
}
while(dec.length <= dot + decimals) { dec += '0'; }
result = dec;
} else{
var dot;
var dec = new String(whole);
dec += '.';
dot = dec.indexOf('.');
while(dec.length <= dot + decimals) { dec += '0'; }
result = dec;
}
return result;
}
function byte_convert(bytes, precision) {
units = new Array('', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
unit = 0;
if(!precision) precision = 2;
do {
bytes /= 1024;
unit++;
} while (bytes > 1024);
return format_number(bytes,precision) + " " + String(units[unit]);
}
Obs: Só não consegui converter usando sprintf então tem essa outra função (format_number), se alguem souber
Espero ter ajudado
naum itendi nadinhaa
num itendi o q voce falo!!!
isso é demais!!! usando a unidade yotabyte posso ter o que eu quiser e quando quiser