UNPKG

rmb-capital

Version:

阿拉伯数字金额转为汉字大写

95 lines (91 loc) 3.24 kB
'use strict'; 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;