Преобразование байтов в читаемые человеком значения (КБ, МБ, ГБ, ТБ, ПБ, ЭБ, ZB, YB) с помощью JavaScript

В мире вычислений такие термины, как килобайты, гигабайты и т. Д. Используются для описания пространства в каком-либо устройстве хранения и системной памяти. Обычно в веб-приложениях они показываются пользователю, чтобы описать, сколько места они имеют в своем облаке или другую функцию, которая требует измерения в байтах. Очевидно, у них не будет представления о том, насколько велик размер файла / свободного места, если вы покажете им количество байтов, поверьте мне, они будут видеть только цифры.

Вот почему вам необходимо отображать эту информацию в определенной записи, используя известные измерения для измерения в КБ, МБ, ГБ и т. Д. В JavaScript это легко сделать двумя способами, о которых мы расскажем вам сегодня в этой статье. Оба они (методы с одинаковыми именами) ожидают в качестве первого аргумента количество байтов в виде целого числа или строки, и он возвращает строку со строкой, которую может прочитать пользователь.

A. 1024 байта на основе короткой версии

Версия на основе 1024 предполагает, что один КБ имеет 1024 байта, и всего за 3 строки кода вы можете легко преобразовать количество байтов в читаемую запись:

Заметка

Так как в теории КБ точно состоит из 1024, этот метод является наиболее точным из обоих.

/**
* Converts a long string of bytes into a readable format e.g KB, MB, GB, TB, YB
*
* @param {Int} num The number of bytes.
*/
function readableBytes(bytes) {
var i = Math.floor(Math.log(bytes) / Math.log(1024)),
sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
return (bytes / Math.pow(1024, i)).toFixed(2) * 1 + ' ' + sizes[i];
}

Метод может быть использован следующим образом:

// "1000 B"
readableBytes(1000);
// "9.42 MB"
readableBytes(9874321);
// "9.31 GB"
// The number of bytes as a string is accepted as well
readableBytes("10000000000");
// "648.37 TB"
readableBytes(712893712304234);
// "5.52 PB"
readableBytes(6212893712323224);

B. 1000-байтовая версия

Другая опция предлагает преобразование байтов в читаемый формат, но с учетом того, что 1 КБ равен 1000 байтов, а не 1024, как первый вариант. Это увеличивает предел точности, но работает почти с той же логикой нашего первого метода:

/**
* Converts a long string of bytes into a readable format e.g KB, MB, GB, TB, YB
*
* @param {Int} num The number of bytes.
*/
function readableBytes(num) {
var neg = num < 0;
var units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
if (neg){
num = -num;
}
if (num < 1){
return (neg ? '-' : '') + num + ' B';
}
var exponent = Math.min(Math.floor(Math.log(num) / Math.log(1000)), units.length - 1);
num = Number((num / Math.pow(1000, exponent)).toFixed(2));
var unit = units[exponent];
return (neg ? '-' : '') + num + ' ' + unit;
}

Метод может быть использован следующим образом:

// "1 KB"
readableBytes(1000);
// "9.87 MB"
readableBytes(9874321);
// "10 GB"
// The number of bytes as a string is accepted as well
readableBytes("10000000000");
// "712.89 TB"
readableBytes(712893712304234);
// "6.21 PB"
readableBytes(6212893712323224);
Ссылка на основную публикацию
Adblock
detector