JSFiddle - React, Tailwind, and code Playground

by tonyleeper

JavaScript

/**
    Format Number Short Form (Metric Prefixes)
*/

var format = {
    multipliers: [
        { value: 1e24, suffix: 'Y' },
        { value: 1e21, suffix: 'Z' },
        { value: 1e18, suffix: 'E' },
        { value: 1e15, suffix: 'P' },
        { value: 1e12, suffix: 'T' },
        { value: 1e9, suffix: 'G' },
        { value: 1e6, suffix: 'M' },
        { value: 1e3, suffix: 'k' },
        { value: 1e0, suffix: '' },
        { value: 1e-3, suffix: 'm' },
        { value: 1e-6, suffix: 'µ' },
        { value: 1e-9, suffix: 'n' },
        { value: 1e-12, suffix: 'p' },
        { value: 1e-15, suffix: 'f' },
        { value: 1e-18, suffix: 'a' },
        { value: 1e-21, suffix: 'z' },
        { value: 1e-24, suffix: 'y' }
    ],

    toShortForm: function(n) {
        if (n < 0) {
            return '-' + this.toShortForm(-n);
        }
        
        if (n > 1) {
            n = n.toPrecision(3);
        }
        
        if (n < 1e27 && n > 1e-27) {
            for (var i = 0; i < this.multipliers.length; i++) {
                if (n >= this.multipliers[i].value) {
                    return (n / this.multipliers[i].value).toFixed() + this.multipliers[i].suffix
                }
            }
        } 
        
        return n.toExponential();    
    }
};

function getRandomInt (min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

console.log(format.toShortForm(99)); // outputs 99
console.log(format.toShortForm(12654)); // outputs 13k
console.log(format.toShortForm(99999999999999999)); // outputs 100P