Converter bytes em gigabytes usando JavaScript
Você já se perguntou quantos bytes existem em um Gigabyte? Gigabyte é uma unidade de medida comumente usada. Gigabyte é amplamente usado em nosso dia-a-dia, o tamanho de arquivo de um filme, a capacidade de um disco rígido, até mesmo o tamanho da memória de acesso aleatório em nossos laptops ou telefones celulares, todos representamos com gigabytes. Todas as unidades, nesses casos, usadas para tratá-los estão em Gigabytes. É necessário um pouco de matemática para a conversão de bytes em gigabytes. É semelhante a converter metros em quilômetros. Vamos ver como podemos fazer a conversão em JavaScript. Existem algumas abordagens para a conversão de bytes em gigabytes, que são as seguintes.
- Convertendo Gigabytes em Bytes em base decimal
- Convertendo Gigabytes em Bytes na Base Binária
Convertendo para Base Decimal
A dúvida mais comum que surge a todos é se um valor de kilobyte é 1024 bytes ou 1000 bytes. Ao pesquisar no Google, obtemos respostas mistas. Mas o conceito subjacente é simples. Em um sistema numérico decimal, um valor de Kilobyte é 1000 bytes, ao passo que, em um sistema numérico binário, o valor é 1024 bytes. Conseqüentemente, os parâmetros de conversão mudam com base nessa ideologia.
Justificativa para conversão com base decimal
Antes de começarmos a explicação, veremos as unidades de conversão de chave. Como estamos lidando com uma base numérica decimal, usaremos a seguinte lógica de conversão.
- 1 KiloByte = 1000 Byte
- 1 Megabyte = 1000 KiloByte
- 1 GigaByte = 1000 MegaByte
Portanto, 1 GigaByte = 1000 * 1000 * 1000 Bytes. Em outras palavras, um GigaByte é equivalente a 10 elevado a 9 (10 ^ 9) bytes. Portanto, a simples pesquisa de 1 GB no google nos dá uma representação como 1e+9. 1e+9 é igual a 1 com zeros 9. Essa é a essência do cálculo da conversão.
Código de Conversão
Agora entendemos o cálculo por trás das conversões e as várias unidades de bytes. Vamos rapidamente percorrer o código javascript para converter um número (número de bytes) fornecido como entrada. O código retornará o valor equivalente em Gigabyte para ele e o exibirá na tela.
<h3><center>Byte to GB</center></h3>
<div>
<center>
<input type="text" id="bytes_input"><label>Bytes</label>
</center>
</div>
<div>
<center>
<button onclick="convertToGB()">Convert</button>
<button onclick="reset()">Reset</button>
</center>
</div>
<center>
<div>
<label>Result: </label> <label id="gbValue">0</label> GB
</div>
</center>
window.onload =
function() {
reset();
updateDisplay(0);
}
function convertToGB() {
let bytesValue = document.getElementById('bytes_input').value;
let gbValue = (bytesValue / (1000 * 1000 * 1000)).toFixed(2);
updateDisplay(gbValue);
}
function reset() {
document.getElementById('bytes_input').value = 0;
updateDisplay(0);
}
function updateDisplay(val) {
document.getElementById('gbValue').innerHTML = val;
}
As etapas são as seguintes.
-
Nós projetamos uma GUI HTML para capturar o número de bytes do usuário. A GUI tem um botão
Converte umReset. Vinculamos o botãoConvertà funçãoconvertToGB()que converte o valor de byte dado em gigabytes. O botãoResetestá vinculado à funçãoreset()para redefinir os valores para que o usuário possa tentar valores mais novos para converter. -
A execução do código começa com a função
window.onload(). A funçãowindow.onload()é a primeira a ser executada quando a página é carregada. Nesta função, redefinimos os valores de Gigabyte de entrada e saída para 0. -
Assim que o usuário insere um valor de byte e clica no botão
Converter, a funçãoconvertToGB()é acionada. -
Na função
convertToGB(), capturamos o valor inserido pelo usuário no campo de byte usando a funçãodocument.getElementById("bytes_input").valuedo javascript e o capturamos no VariávelbytesValue. Na próxima etapa, convertemos esse valor de byte em gigabytes dividindobytesValuepor(1000 * 1000 * 1000). Lembre-se de que dividir o valor do byte por 1000 nos dá o valor do kilobyte, dividindo-o ainda mais por mil retorna o valor do megabyte e dividindo o valor dos megabytes nos dá a representação dos gigabytes para os bytes. -
Fazemos esses cálculos e armazenamos o resultado na variável
gbValue. Na próxima linha, exibimosgbValuena GUI definindo o valorlabelusandodocument.getElementById("gbValue").innerHTML. E, portanto, o valor convertido é exibido no HTML.
Observações
- Em essência, vamos exigir um byte com um valor com mais de sete dígitos para obter um equivalente em Gigabyte tangível para ele. O valor mínimo de saída é
0.01 GB, que se converte em10000000 Bytes. Isso significa que, usando o código acima, um byte com um valor maior que10000000 Bytesserá mostrado na saída. A saída para valores menores do que isso será0 GB. - Existe uma limitação do número de dígitos que uma variável pode conter em javascript. JavaScript tem uma constante
Number.MAX_SAFE_INTEGERque define o valor máximo que uma variável de número pode conter em javascript que é9007199254740991. Conseqüentemente, o código não converterá nenhum número de byte a mais do que ele na representação de Gigabytes. Podemos perder a precisão durante a conversão. Nós não o recomendamos. - De acordo com o código que vimos acima, o valor de saída mostra valores arredondados para duas casas decimais. Usamos a função
Number.toFixed()do JavaScript. De acordo com a linha(bytesValue / (1000 * 1000 * 1000)).toFixed(2), a saída será de 2 casas decimais. Se mostrarmos o valor de gigabyte com melhor precisão, podemos ajustar o código com.toFixed(3)ou.toFixed(4)de acordo com o requisito.
Convertendo para base binária
A maneira mais comum de converter um valor de byte em um Gigabyte é com o valor de base binária. A maioria de nós está ciente do valor unitário 1024. Ao contrário do sistema decimal, onde a divisão é por 1000, para converter para unidades de byte mais altas, no sistema numérico binário, dividimos pelo fator 1024.
Base para conversão com base binária
Antes de examinar o código da conversão, vejamos o valor da unidade de conversão no sistema numérico binário. Aqui, a justificativa girará em torno de 1024 (ou seja, 2 elevado à potência 10 ou 210).
- 1 KiloByte = 1024 Byte
- 1 Megabyte = 1024 KiloByte
- 1 GigaByte = 1024 MegaByte
Portanto, no sistema de base binário, 1 GigaByte = 1024 * 1024 * 1024 Bytes. Converter um valor de número de byte em Gigabyte exigirá sua divisão por 1024 * 1024 * 1024.
Código de Conversão
O código a seguir converte o número de bytes em uma representação de gigabytes no sistema binário.
<h3><center>Byte to GB</center></h3>
<div>
<center>
<input type="text" id="bytes_input"><label>Bytes</label>
</center>
</div>
<div>
<center>
<button onclick="convertToGB()">Convert</button>
<button onclick="reset()">Reset</button>
</center>
</div>
<center>
<div>
<label>Result: </label> <label id="gbValue">0</label> GB
</div>
</center>
window.onload =
function() {
reset();
updateDisplay(0);
}
function convertToGB() {
let bytesValue = document.getElementById('bytes_input').value;
let gbValue = (bytesValue / (1024 * 1024 * 1024)).toFixed(2);
updateDisplay(gbValue);
}
function reset() {
document.getElementById('bytes_input').value = 0;
updateDisplay(0);
}
function updateDisplay(val) {
document.getElementById('gbValue').innerHTML = val;
}
Em comparação com o código com a conversão do sistema de base decimal, a única diferença aqui é que usamos o fator 1024 em vez de 1000 que é evidente a partir da linha (bytesValue / (1024 * 1024 * 1024)).toFixed(2).
Observações
- A mesma limitação se aplica a este método para o intervalo de número máximo que pode ser inserido. Um número maior que
9007199254740991não garante uma conversão bem-sucedida. - Podemos ajustar a precisão alterando o parâmetro da função
toFixed()na linha(bytesValue / (1024 * 1024 * 1024)).toFixed(2). Normalmente, na maioria dos casos, 2 ou 3 dígitos são preferidos após o decimal. - Os resultados podem ser diferentes em ambas as conversões, a conversão de base decimal e a conversão de base binária. A comparação entre os dois métodos é inválida, pois será como comparar maçã e laranja. Os resultados estão nos respectivos sistemas de base numérica. Isso significa que, no sistema de base decimal de conversão de bytes em gigabytes, o resultado será a representação de gigabytes no sistema de numeração decimal e vice-versa para o sistema de base numérica binária.