rmb-capital
Version:
95 lines (91 loc) • 3.24 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
const defaultRmbCapitalConverterConfig = {
capital_numbers: ["\u96F6", "\u58F9", "\u8D30", "\u53C1", "\u8086", "\u4F0D", "\u9646", "\u67D2", "\u634C", "\u7396"],
integer_units: ["", "\u62FE", "\u4F70", "\u4EDF"],
place_units: ["", "\u4E07", "\u4EBF"],
decimal_units: ["\u89D2", "\u5206", "\u5398", "\u6BEB"],
prefix: "\u4EBA\u6C11\u5E01"
};
function rmbCapital(amount, options) {
const config = { ...defaultRmbCapitalConverterConfig, ...options || {} };
let integerResult = convertInteger(amount, config);
let decimalResult = convertDecimal(amount, config);
if (!integerResult && !decimalResult) {
integerResult += config.capital_numbers[0];
}
if (integerResult) {
integerResult += "\u5143";
}
if (!decimalResult) {
integerResult += "\u6574";
}
if ((amount + "").trim().startsWith("-")) {
integerResult = "\u8D1F" + integerResult;
}
return config.prefix + integerResult + decimalResult;
}
function convertInteger(amount, options) {
const config = { ...defaultRmbCapitalConverterConfig, ...options || {} };
const parts = (amount + "").trim().split(".");
const integer = (parts[0] || "").replace("-", "");
let result = [];
const integerNumbers = parseInt(integer) ? integer.split("").reverse() : [];
let last = null;
for (let i = 0; i < integerNumbers.length; i += 4) {
const chunk = integerNumbers.slice(i, i + 4);
const chunkKey = i / 4;
const chunkInt = parseInt(chunk.join(""));
if (chunkInt === 0 || isNaN(chunkInt)) {
continue;
}
result.unshift(config.place_units[chunkKey] || "");
for (const key in chunk) {
const number = parseInt(chunk[key]);
if (!number && (!last || key === "0")) {
last = number;
continue;
}
last = number;
if (number) {
result.unshift(config.integer_units[key] || "");
}
result.unshift(config.capital_numbers[number] || "");
}
}
return result.join("");
}
function convertDecimal(amount, options) {
const config = { ...defaultRmbCapitalConverterConfig, ...options || {} };
const result = [];
const parts = (amount + "").trim().split(".");
const integer = parseInt((parts[0] || "").replace("-", ""));
let decimal = parts[1] || "";
const decimalIntval = parseInt(decimal);
if (decimalIntval === 0 || isNaN(decimalIntval)) {
decimal = "";
}
const decimalNumbers = decimal.split("");
const jiao = parseInt(decimalNumbers.shift() || "");
if (jiao) {
result.push(...[config.capital_numbers[jiao], config.decimal_units[0]]);
if (decimalNumbers.filter((n) => !!n).length === 0) {
result.push("\u6574");
}
} else {
if (decimalNumbers.filter((n) => !!n).length > 0 && integer) {
result.push(config.capital_numbers[0]);
}
}
for (const key in decimalNumbers) {
const number = decimalNumbers[key];
if (number) {
result.push(...[config.capital_numbers[parseInt(number)], config.decimal_units[parseInt(key) + 1]]);
}
}
return result.join("");
}
exports.convertDecimal = convertDecimal;
exports.convertInteger = convertInteger;
exports.default = rmbCapital;
exports.rmbCapital = rmbCapital;