UNPKG

qm-legacy

Version:

Legacy support for our utility scripts implementing async, functional, and immutable JavaScript.

28 lines (23 loc) 967 B
const decimalPlaces = require('./decimalPlaces'); const suffixWith = require('./suffixWith'); module.exports = function formatNumber(precision = 1, lessThanOneThousandPrecision = 2) { return (numberArg) => { const number = parseFloat(numberArg); const absNumber = Math.abs(number); const exponent = Math.max(Math.log(absNumber) / Math.log(10), 0); const suffixes = ['', 'K', 'M', 'B', 'T']; const triplet = Math.min(Math.floor(exponent / 3), suffixes.length - 1); let condensedNumber; if (triplet > 0) { condensedNumber = decimalPlaces(precision)( number / Math.pow(10, triplet * 3) ); } else { condensedNumber = number % 1 === 0 ? number.toString() : decimalPlaces(lessThanOneThousandPrecision)(number); } return suffixWith(suffixes[triplet])(condensedNumber); }; }