@aplus-frontend/utils
Version:
Utils for Aplus frontend team.
76 lines (75 loc) • 2.67 kB
JavaScript
import { isFinite } from "lodash-es";
import Decimal__default from "decimal.js";
export * from "decimal.js";
function isNumeric(value) {
return !isNaN(parseFloat(value)) && isFinite(Number(value));
}
function toFixed(value, precision = 2) {
if (!isNumeric(value)) return value;
return new Decimal__default(value).toFixed(precision).toString();
}
function toSignificantDigits(value, precision = 2) {
if (!isNumeric(value) || precision <= 0) return value;
return new Decimal__default(value).toSignificantDigits(precision).toString();
}
function toThousand(value, precision = 2, type = "fixed") {
if (!isNumeric(value)) return value;
const toList = {
fixed: toFixed,
significantDigits: toSignificantDigits
};
const numberValue = toList[type](value, precision).toString();
return numberValue.split(".").map((item, index) => {
if (index === 0) {
return item.replace(/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g, "$&,");
} else {
return item;
}
}).join(".");
}
function toPercent(value, precision = 2, type = "fixed") {
if (!isNumeric(value)) return value;
if (precision <= 0) {
return `${new Decimal__default(value).mul(new Decimal__default(100)).toFixed(0).toString()}%`;
}
return `${new Decimal__default(value).mul(new Decimal__default(100))[`to${type.charAt(0).toUpperCase()}${type.slice(1)}`](precision).toString()}%`;
}
function addNumberAtom(a, b) {
if (!isNumeric(a) || !isNumeric(b)) return void 0;
return new Decimal__default(a).add(new Decimal__default(b));
}
function subNumberAtom(a, b) {
if (!isNumeric(a) || !isNumeric(b)) return void 0;
return new Decimal__default(a).sub(new Decimal__default(b));
}
function mulNumberAtom(a, b) {
if (!isNumeric(a) || !isNumeric(b)) return void 0;
return new Decimal__default(a).mul(new Decimal__default(b));
}
function divNumberAtom(a, b) {
if (!isNumeric(a) || !isNumeric(b)) return void 0;
return new Decimal__default(a).div(new Decimal__default(b));
}
function addNumber(...args) {
return args.every(isNumeric) ? args.reduce((a, b) => addNumberAtom(a.toString(), b.toString())) : void 0;
}
function subNumber(...args) {
return args.every(isNumeric) ? args.reduce((a, b) => subNumberAtom(a.toString(), b.toString())) : void 0;
}
function mulNumber(...args) {
return args.every(isNumeric) ? args.reduce((a, b) => mulNumberAtom(a.toString(), b.toString())) : void 0;
}
function divNumber(...args) {
return args.every(isNumeric) ? args.reduce((a, b) => divNumberAtom(a.toString(), b.toString())) : void 0;
}
export {
addNumber,
divNumber,
isNumeric,
mulNumber,
subNumber,
toFixed,
toPercent,
toSignificantDigits,
toThousand
};