@modern-kit/utils
Version:
45 lines (41 loc) • 1.71 kB
JavaScript
;
var formatterFormatNumberWithCommas = require('../formatNumberWithCommas/index.cjs');
var validatorIsNumber = require('../../validator/isNumber/index.cjs');
const formatNumberWithConditionalCommas = (value, commas) => {
return commas ? formatterFormatNumberWithCommas.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 = validatorIsNumber.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);
}
exports.formatNumberWithUnits = formatNumberWithUnits;
//# sourceMappingURL=index.cjs.map