Я получил этот код для преобразования размера в байтах с помощью PHP.
Теперь я хочу преобразовать эти размеры в удобочитаемые размеры с помощью JavaScript. Я попытался преобразовать этот код в JavaScript, который выглядит следующим образом:
function formatSizeUnits(bytes){
if (bytes >= 1073741824) { bytes = (bytes / 1073741824).toFixed(2) + " GB"; }
else if (bytes >= 1048576) { bytes = (bytes / 1048576).toFixed(2) + " MB"; }
else if (bytes >= 1024) { bytes = (bytes / 1024).toFixed(2) + " KB"; }
else if (bytes > 1) { bytes = bytes + " bytes"; }
else if (bytes == 1) { bytes = bytes + " byte"; }
else { bytes = "0 bytes"; }
return bytes;
}
Это правильный способ сделать это? Есть ли более простой способ?
javascript
byte
converters
l2aelba
источник
источник
Ответы:
Из этого: ( источник )
Примечание: это оригинальный код, пожалуйста, используйте фиксированную версию ниже. Aliceljm больше не активирует свой скопированный код
Теперь исправлена версия без изменений и ES6: (от сообщества)
Теперь исправлена версия: (от сообщества Stackoverflow, + Minified by JSCompress )
Использование :
Демо / источник:
PS: изменить
k = 1000
илиsizes = ["..."]
как вы хотите ( биты или байты )источник
(bytes / Math.pow(1024, i)).toPrecision(3)
toFixed(n)
вероятно, более уместно, чемtoPrecision(n)
иметь постоянную точность для всех значений. И чтобы избежать конечных нулей (например:)bytesToSize(1000) // return "1.00 KB"
мы могли бы использоватьparseFloat(x)
. Я предлагаю заменить последнюю строку на:return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
. С предыдущим изменением результаты:bytesToSize(1000) // return "1 KB"
/bytesToSize(1100) // return "1.1 KB"
/bytesToSize(1110) // return "1.11 KB
/bytesToSize(1111) // also return "1.11 KB"
источник
Полученные результаты:
источник
Вы можете использовать библиотеку filesizejs .
источник
Существует два реальных способа представления размеров в байтах: это единицы СИ (10 ^ 3) или единицы МЭК (2 ^ 10). Есть также JEDEC, но их метод неоднозначен и запутан. Я заметил, что в других примерах есть ошибки, такие как использование KB вместо kB для представления килобайта, поэтому я решил написать функцию, которая будет решать каждый из этих случаев с использованием диапазона принятых в настоящее время единиц измерения.
В конце есть бит форматирования, который заставит число выглядеть немного лучше (по крайней мере, на мой взгляд), не стесняйтесь удалить это форматирование, если оно не соответствует вашим целям.
Наслаждаться.
источник
Вот один вкладыш:
val => ['Bytes','Kb','Mb','Gb','Tb'][Math.floor(Math.log2(val)/10)]
Или даже:
val => 'BKMGT'[~~(Math.log2(val)/10)]
источник
val => 'BKMGT'[~~(Math.log10(val)/3)]
i = ~~(Math.log2(b)/10); return (b/Math.pow(1024,i)).toFixed(2) + ("KMGTPEZY"[i-1]||"") + "B"
Использование побитовой операции было бы лучшим решением. Попробуй это
источник
Согласно ответу Aliceljm , я удалил 0 после десятичного числа:
источник
Первоначально я использовал ответ @Aliceljm для проекта загрузки файлов, над которым я работал, но недавно столкнулся с проблемой, когда файл
0.98kb
читался как1.02mb
. Вот обновленный код, который я сейчас использую.Вышеуказанное будет вызываться после добавления файла следующим образом:
Конечно, Windows считывает файл как существующий,
24.8mb
но я в порядке с дополнительной точностью.источник
Это решение основано на предыдущих решениях, но учитывает как метрические, так и двоичные единицы:
Примеры:
источник
источник
источник
Я обновляю ответ @Aliceljm здесь. Поскольку десятичное место имеет значение для 1,2-значных чисел, я округляю первое десятичное число и сохраняю первое десятичное. Для трехзначного числа я округляю число единиц и игнорирую все десятичные знаки.
источник
Вот как байт должен быть показан человеку:
источник
Я просто хотел поделиться своим мнением. У меня была эта проблема, поэтому мое решение таково. Это преобразует более низкие единицы в более высокие, и наоборот, просто предоставляет аргумент
toUnit
иfromUnit
У меня есть идея отсюда
источник
источник
byteVal >> 10
. Также вам лучше использоватьMath.trunc()
для приведения действительных чисел в целые числа вместо деления на 1.Попробуйте этот простой обходной путь.
источник