@modern-kit/utils
Version:
43 lines (40 loc) • 1.61 kB
JavaScript
import { formatNumberWithCommas } from '../formatNumberWithCommas/index.mjs';
import { isNumber } from '../../validator/isNumber/index.mjs';
const formatNumberWithConditionalCommas = (value, commas) => {
return commas ? formatNumberWithCommas(value) : value;
};
const getFormattedNumberWithUnits = (value, options) => {
const { units, commas = true, decimal = 0 } = options;
const sortedUnits = [...units].sort((a, b) => b.value - a.value);
const absoluteValue = Math.abs(value);
const negativeSign = value < 0 ? "-" : "";
let formattedResult = "";
let remainingValue = absoluteValue;
for (let i = 0; i < sortedUnits.length; i++) {
const { unit, value: unitValue } = units[i];
const quotient = Math.floor(remainingValue / unitValue);
const space = " ";
if (quotient <= 0) continue;
formattedResult += `${formatNumberWithConditionalCommas(
quotient,
commas
)}${unit}${space}`;
remainingValue %= unitValue;
}
if (remainingValue > 0) {
formattedResult += `${formatNumberWithConditionalCommas(
remainingValue.toFixed(decimal),
commas
)}`;
}
return `${negativeSign}${formattedResult.trim()}`;
};
function formatNumberWithUnits(value, options) {
const valueToUse = isNumber(value) ? value : Number(value);
if (isNaN(valueToUse)) {
throw new Error("value\uB294 \uC22B\uC790 \uD639\uC740 \uC22B\uC790\uB85C \uC774\uB904\uC9C4 \uBB38\uC790\uC5F4\uC774\uC5EC\uC57C \uD569\uB2C8\uB2E4.");
}
return getFormattedNumberWithUnits(valueToUse, options);
}
export { formatNumberWithUnits };
//# sourceMappingURL=index.mjs.map