UNPKG

@aplus-frontend/utils

Version:

Utils for Aplus frontend team.

76 lines (75 loc) 2.67 kB
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 };