@iohub/sizeinfo
Version:
Smart utilities for converting file sizes to human-readable formats with customizable decimal and binary scale conversions
40 lines (34 loc) • 1.14 kB
JavaScript
import { roundD2 } from '@aryth/math';
function base3ToScale(base3, dec) {
if (base3 === 0) return 'B' //
if (base3 === 1) return dec ? 'K' : 'KB' // Kilo
if (base3 === 2) return dec ? 'M' : 'MB' // Mega
if (base3 === 3) return dec ? 'G' : 'GB' // Giga
if (base3 === 4) return dec ? 'T' : 'TB' // Tera
if (base3 === 5) return dec ? 'P' : 'PB' // Peta
if (base3 === 6) return dec ? 'E' : 'EB' // Exa
if (base3 === 7) return dec ? 'Z' : 'ZB' // Zetta
if (base3 === 8) return dec ? 'Y' : 'YB' // Yotta
}
/**
* @param {number} num
* @returns {string}
*/
function trailZero(num) {
if (!num) return '0'
const tx = '' + roundD2(num);
let i = tx.indexOf('.');
if (!~i) { return tx + '.00' }
let df = tx.length - i;
if (df === 3) { return tx }
if (df === 2) { return tx + '0' }
if (df === 1) { return tx + '00' }
return tx
}
const humanScale = (num, dec) => {
const B10 = dec ? 1000 : 1024;
let base3 = 0;
while (num > B10) { num /= B10, base3++; }
return trailZero(num) + ' ' + base3ToScale(base3, dec)
};
export { base3ToScale, humanScale, trailZero };