UNPKG

@adaptabletools/adaptable

Version:

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

80 lines (79 loc) 2.65 kB
export 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; } export function wrapInParentheses(numberToWrap) { return ' (' + numberToWrap + ')'; } export 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('')); } export 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); } export const NumberExtensions = { abbreviateNumber, wrapInParentheses, timesBy100, divideBy100, }; export default NumberExtensions;