UNPKG

@adaptabletools/adaptable-cjs

Version:

Powerful data-agnostic HTML5 AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements

87 lines (86 loc) 3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.NumberExtensions = exports.divideBy100 = exports.timesBy100 = exports.wrapInParentheses = exports.abbreviateNumber = void 0; function abbreviateNumber(numberToAbbreviate) { let str = ''; if (numberToAbbreviate >= 1000000000) { str = (numberToAbbreviate / 1000000000).toFixed(1) + 'B'; } else if (numberToAbbreviate >= 1000000) { str = (numberToAbbreviate / 1000000).toFixed(1) + 'M'; } else if (numberToAbbreviate >= 1000) { str = (numberToAbbreviate / 1000).toFixed(1) + 'K'; } else { str = numberToAbbreviate.toString(); } return str; } exports.abbreviateNumber = abbreviateNumber; function wrapInParentheses(numberToWrap) { return ' (' + numberToWrap + ')'; } exports.wrapInParentheses = wrapInParentheses; function timesBy100(value) { // the simple solution does not work // return value * 100; // needed because 0.12676 * 100 = 12.676000000000002 // but we dont want that to happen // this solution does not handle -0 correctly // also 1267.6 * 100 is 126759.99999999999 // which is not what we want // return parseFloat((value * 100).toFixed(12)); if (isNaN(value) || !value) { return value; } const valueAsStr = value.toPrecision(); const separator = Number(1.1).toLocaleString()[1]; const indexOfSeparator = valueAsStr.indexOf(separator); if (indexOfSeparator === -1) { return value * 100; } const [integer, decimal] = valueAsStr.split(separator); const num = [...`${integer}${decimal ?? ''}00`]; num.splice(indexOfSeparator + 2, 0, separator); return Number(num.join('')); } exports.timesBy100 = timesBy100; function divideBy100(value) { // the simple solution does not work // return value / 100; // needed because 4012.3456/100 = 40.123456000000004 // but we dont want that to happen // this solution does not handle -0 correctly // return parseFloat((value / 100).toFixed(12)); if (isNaN(value) || !value) { return value; } const isNegative = value < 0; if (isNegative) { value = -value; } const valueAsStr = value.toPrecision(); const separator = Number(1.1).toLocaleString()[1]; let indexOfSeparator = valueAsStr.indexOf(separator); if (indexOfSeparator === -1) { indexOfSeparator = 0; } let [integer = '', decimal] = valueAsStr.split(separator); decimal = decimal || ''; integer = integer.padStart(2, '0'); const integerArr = [...integer]; const num = integerArr.slice(0, integerArr.length - 2).join('') + separator + integerArr.slice(-2).join('') + decimal; return Number(num) * (isNegative ? -1 : 1); } exports.divideBy100 = divideBy100; exports.NumberExtensions = { abbreviateNumber, wrapInParentheses, timesBy100, divideBy100, }; exports.default = exports.NumberExtensions;