import { Formatter, Column } from 'angular-slickgrid'; export const ekThousandSeparatorFormatter: Formatter = (row: number, cell: number, value: any, columnDef: Column, dataContext: any, grid: any) => { // const isNumber = (value === null || value === undefined || value === '') ? false : !isNaN(+value); const params = columnDef.params || {}; const minDecimal = params ? params['minDecimalPlaces'] : undefined; const maxDecimal = params ? params['maxDecimalPlaces'] : undefined; // const displayNegativeNumberWithParentheses = // getValueFromParamsOrGridOptions('displayNegativeNumberWithParentheses', columnDef, grid, false); // // @deprecated: decimalPlaces, minDecimalPlaces, maxDecimalPlaces // // add these extra checks to support previous way of passing the decimal count // if ((params.minDecimalPlaces !== null && params.minDecimalPlaces) || (params.decimalPlaces !== null && params.decimalPlaces)) { // minDecimal = (params.minDecimalPlaces !== null && params.minDecimalPlaces) || // (params.decimalPlaces !== null && params.decimalPlaces); // } // if (params.maxDecimalPlaces !== null && params.maxDecimalPlaces) { // maxDecimal = (params.maxDecimalPlaces !== null && params.maxDecimalPlaces); // } // if (isNumber) { // return formatNumber(value, minDecimal, maxDecimal, displayNegativeNumberWithParentheses); // } // return value; return numberWithCommas(value, minDecimal, maxDecimal); }; export function numberWithCommas(input: number | string, minDecimal?: number, maxDecimal?: number) { if (input === undefined || input === null || input === '') { return ''; } if (isNaN(+input)) { return 'NaN'; } let count = 0; const valStr = String(input); const parts = valStr.split('.'); let parts1 = parts[0]; let parts2 = ''; if (parts.length === 2) { parts2 = parts[1]; } // if (maxDecimal) { // let x = 1; // } // if (maxDecimal === 0) { // let x = 1; // } // if (maxDecimal <= 0) { // let x = 1; // } // if (maxDecimal > 0) { // let x = 1; // } if (minDecimal && minDecimal > parts2.length) { while (minDecimal > parts2.length) { parts2 += '0'; } } if (maxDecimal && maxDecimal > 0 && maxDecimal < parts2.length) { const lastDigit = parseInt(parts2[maxDecimal]); let last2ndDigit = parseInt(parts2[maxDecimal - 1]); if (lastDigit >= 5) { last2ndDigit += 1; } parts2 = parts2.substr(0, maxDecimal - 1) + last2ndDigit.toString(); } if (maxDecimal === 0 && parts2.length > 0) { const lastDigit = parseInt(parts2[0]); let last2ndDigit = parseInt(parts1[parts1.length - 1]); if (lastDigit >= 5) { last2ndDigit += 1; } parts1 = parts1.substr(0, parts1.length - 1) + last2ndDigit.toString(); parts2 = ''; } let result = parts2 === '' ? '' : '.' + parts2; for (let i = parts1.length - 1; i >= 0; i--) { count++; result = parts1[i] + result; if (count === 3) { if (i > 0 && parts1[i - 1] !== '-') { result = ',' + result; } count = 0; } } return result; }