@iimm/shared
Version:
shared utils on browser and react env
113 lines (111 loc) • 4.06 kB
JavaScript
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/cjs/number/index.ts
var number_exports = {};
__export(number_exports, {
isNumberBetween: () => isNumberBetween,
numberToChinese: () => numberToChinese
});
module.exports = __toCommonJS(number_exports);
var isNumberBetween = (number, options) => {
const { min, max, equal } = options || {};
const minType = typeof min;
const maxType = typeof max;
if (minType === "undefined" && maxType === "undefined")
return false;
if (minType !== "undefined" && minType !== "number")
return false;
if (maxType !== "undefined" && maxType !== "number")
return false;
const num = +number;
if (isNaN(num))
return false;
const [minEqual, maxEqual] = Array.isArray(equal) ? equal : [equal, equal];
let isBetween = true;
if (minType !== "undefined") {
isBetween = minEqual ? num >= min : num > min;
}
if (maxType !== "undefined") {
isBetween = isBetween && (maxEqual ? num <= max : num < max);
}
return isBetween;
};
var numberToChinese = (number, options = { case: "upper" }) => {
const confs = {
lower: {
num: ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"],
unit: ["", "十", "百", "千", "万"],
level: ["", "万", "亿"]
},
upper: {
num: ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"],
unit: ["", "拾", "佰", "仟"],
level: ["", "万", "亿"]
},
decimal: {
unit: ["分", "角"]
},
maxNumber: 99999999999999e-2
};
if (Number(number) > confs.maxNumber) {
console.error(
`The maxNumber is ${confs.maxNumber}. ${number} is bigger than it!`
);
return null;
}
const conf = confs[(options == null ? void 0 : options.case) || "upper"];
const numbers = String(Number(number).toFixed(2)).split(".");
const integer = numbers[0].split("");
const decimal = Number(numbers[1]) === 0 ? [] : numbers[1].split("");
const levels = integer.reverse().reduce((pre, item, idx) => {
const level = pre[0] && pre[0].length < 4 ? pre[0] : [];
const value = item === "0" ? conf.num[item] : conf.num[item] + conf.unit[idx % 4];
level.unshift(value);
if (level.length === 1) {
pre.unshift(level);
} else {
pre[0] = level;
}
return pre;
}, []);
const _integer = levels.reduce((pre, item, idx) => {
let _level = conf.level[levels.length - idx - 1];
let _item = item.join("").replace(/(零)\1+/g, "$1");
if (_item === "零") {
_item = "";
_level = "";
} else if (_item[_item.length - 1] === "零") {
_item = _item.slice(0, _item.length - 1);
}
return pre + _item + _level;
}, "");
if (!(options == null ? void 0 : options.decimal)) {
return (options == null ? void 0 : options.money) ? `${_integer}元整` : _integer;
}
const _decimal = decimal.map((item, idx) => {
const unit = confs.decimal.unit;
const _unit = item !== "0" ? unit[unit.length - idx - 1] : "";
return `${conf.num[item]}${_unit}`;
}).join("");
return (options == null ? void 0 : options.money) ? `${_integer}元` + (_decimal || "整") : `${_integer}${_decimal ? `点${_decimal}` : ""}`;
};
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
isNumberBetween,
numberToChinese
});