31 lines
806 B
JavaScript
31 lines
806 B
JavaScript
module.exports = prettierBytes
|
|
|
|
function prettierBytes (num) {
|
|
if (typeof num !== 'number' || isNaN(num)) {
|
|
throw new TypeError('Expected a number, got ' + typeof 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))
|
|
var unit = units[exponent]
|
|
|
|
if (num >= 10 || num % 1 === 0) {
|
|
// Do not show decimals when the number is two-digit, or if the number has no
|
|
// decimal component.
|
|
return (neg ? '-' : '') + num.toFixed(0) + ' ' + unit
|
|
} else {
|
|
return (neg ? '-' : '') + num.toFixed(1) + ' ' + unit
|
|
}
|
|
}
|