UNPKG

@gitlab/ui

Version:
94 lines (82 loc) 2.41 kB
/** * Adds two numbers together * @param {Number} a * @param {Number} b */ var addition = function addition(a, b) { return a + b; }; /** * Returns the sum of all arguments * @param {...Number} numbers */ var sum = function sum() { for (var _len = arguments.length, numbers = new Array(_len), _key = 0; _key < _len; _key++) { numbers[_key] = arguments[_key]; } return numbers.reduce(addition); }; /** * Returns the average of all arguments * @param {...Number} numbers */ var average = function average() { return sum.apply(void 0, arguments) / arguments.length; }; /** * Returns a function that checks wether its argument is an integer greater than gt * @param {Number} gt number to be compared against */ var isIntGreaterThan = function isIntGreaterThan(gt) { return function (number) { return Number.isInteger(number) && number > gt; }; }; /** * Convert number to engineering format, using SI suffix * @param {Number} num * @param {Number} precision * @return {String} number, possibly with a suffix */ var engineeringNotation = function engineeringNotation(num) { var precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2; var invalidValues = [NaN, Infinity, -Infinity]; if (invalidValues.includes(Number(num)) || invalidValues.includes(Number(precision))) { return num.toString(); } var allYourBase = { '-24': 'y', '-21': 'z', '-18': 'a', '-15': 'f', '-12': 'p', '-9': 'n', '-6': 'μ', '-3': 'm', '0': '', '3': 'k', '6': 'M', '9': 'G', '12': 'T', '15': 'P', '18': 'E', '21': 'Z', '24': 'Y' }; var exponentialNotation = num.toExponential(precision); var power = exponentialNotation.split('e').map(Number)[1] || 0; if (power < -24 || power > 24) { return exponentialNotation; } var scaledPower = 3 * Math.floor(power / 3); var scaledMantissa = (exponentialNotation / Math.pow(10, scaledPower)). // strip trailing decimals from floating point rounding errors toFixed(precision) // strip trailing 0s after a decimal point .replace(/\.([1-9]*)0+$/, function (_, fractionalDigits) { if (fractionalDigits) { return ".".concat(fractionalDigits); } return ''; }); return "".concat(scaledMantissa).concat(allYourBase[scaledPower]); }; export { addition, average, engineeringNotation, isIntGreaterThan, sum };