From this: (source)
Unminified and ES6’ed: (by the community)
function formatBytes(bytes, decimals = 2) {
if (!+bytes) return '0 Bytes'
const k = 1024
const dm = decimals < 0 ? 0 : decimals
const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']
const i = Math.floor(Math.log(bytes) / Math.log(k))
return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`
}
// Demo code
document.body.innerHTML += `<input type="text" oninput="document.querySelector('p').innerHTML=formatBytes(this.value)" value="1000"><p>1000 Bytes</p>`
Minified version (by StackOverflow’s community, minified by JSCompress)
function formatBytes(a,b=2){if(!+a)return"0 Bytes";const c=0>b?0:b,d=Math.floor(Math.log(a)/Math.log(1024));return`${parseFloat((a/Math.pow(1024,d)).toFixed(c))} ${["Bytes","KB","MB","GB","TB","PB","EB","ZB","YB"][d]}`}
Usage:
// formatBytes(bytes, decimals)
formatBytes(1024) // 1 KB
formatBytes('1024') // 1 KB
formatBytes(1234) // 1.21 KB
formatBytes(1234, 3) // 1.205 KB
formatBytes(0) // 0 Bytes
formatBytes('0') // 0 Bytes
PS : Change k = 1000
or sizes = ["..."]
as you want (bits or bytes)