@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
43 lines • 1.55 kB
JavaScript
export function roundHalfEven(num, decimalPlaces = 2) {
const multiplier = Math.pow(10, decimalPlaces);
const adjustedNum = num * multiplier;
const floored = Math.floor(adjustedNum);
const diff = adjustedNum - floored;
if (diff > 0.5) {
return Math.ceil(adjustedNum) / multiplier;
} else if (diff < 0.5) {
return Math.floor(adjustedNum) / multiplier;
}
return floored % 2 === 0 ? floored / multiplier : Math.ceil(adjustedNum) / multiplier;
}
export const formatDecimals = (value, decimals, rounding, opts = {}) => {
decimals = parseFloat(String(decimals));
if (decimals >= 0) {
opts.minimumFractionDigits = decimals;
opts.maximumFractionDigits = decimals;
}
if (String(value).includes('.')) {
const decimalPlaces = decimals || opts.maximumFractionDigits;
if (rounding === 'omit' || rounding === true) {
const factor = Math.pow(10, decimalPlaces);
value = Math.trunc(Number(value) * factor) / factor;
} else {
switch (rounding) {
case 'half-even':
{
value = roundHalfEven(Number(value), decimalPlaces);
break;
}
}
}
}
return value;
};
export const countDecimals = (value, decimalSeparator = '.') => {
var _String$split$;
if (typeof value === 'number' && Math.floor(value.valueOf()) === value.valueOf()) {
return 0;
}
return ((_String$split$ = String(value).split(decimalSeparator)[1]) === null || _String$split$ === void 0 ? void 0 : _String$split$.length) || 0;
};
//# sourceMappingURL=decimals.js.map