@technobuddha/library
Version:
A large library of useful functions
38 lines (37 loc) • 1.76 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.metricUnits = void 0;
var constants_1 = require("../constants");
var formatNumber_1 = require("../formatNumber");
var isNil_1 = __importDefault(require("lodash/isNil"));
var round_1 = __importDefault(require("lodash/round"));
/**
* Abbreviate a number by adding a suffix for metric units (i.e. 1000 => 1K, .0001 = 1m)
*
* @param input The number to abbreviate
* @param __namedParameters {@link MetricUnitOptions}
*/
function metricUnits(input, _a) {
var _b = _a === void 0 ? {} : _a, format = _b.format, pad = _b.pad, _c = _b.macro, macro = _c === void 0 ? ['K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'] : _c, _d = _b.micro, micro = _d === void 0 ? ['m', 'µ', 'n', 'p', 'f', 'a', 'z', 'y'] : _d, _e = _b.unit, unit = _e === void 0 ? 1000 : _e, _f = _b.precision, precision = _f === void 0 ? 2 : _f;
var number = Math.abs(input);
var suffix = constants_1.empty;
var index = 0;
if (number < 1) {
while ((number + Number.EPSILON) < 1 && index < micro.length) {
suffix = micro[index++];
number = number * unit;
}
}
else {
while ((number + Number.EPSILON) >= unit && index < macro.length) {
suffix = macro[index++];
number = number / unit;
}
}
return (isNil_1.default(format) ? round_1.default(number, precision).toString() : formatNumber_1.formatNumber(round_1.default(number, precision), format)).padStart(pad !== null && pad !== void 0 ? pad : 0) + suffix;
}
exports.metricUnits = metricUnits;
exports.default = metricUnits;