题解 | #人民币转换#
人民币转换
https://www.nowcoder.com/practice/00ffd656b9604d1998e966d555005a4b
const rl = require("readline").createInterface({ input: process.stdin }); var iter = rl[Symbol.asyncIterator](); const readline = async () => (await iter.next()).value; const CN_NUM_MAP = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"]; const UNITS = ["", "拾", "佰", "仟"]; const BIG_UNITS = ["", "万", "亿"]; const DIGITS_UNITS = ["角", "分"]; const F = "负"; const SIGN = "人民币"; const Z = "整"; const RMB = "元"; function _transform(numStr) { const arr = numStr.toString().split(""); let result = ""; for (let i = 0; i < arr.length; i++) { const digit = +numStr[i]; const char = CN_NUM_MAP[digit]; const unit = UNITS[numStr.length - i - 1]; if (digit === 0) { // 末尾不为零时才需要追加 if (result[result.length - 1] !== CN_NUM_MAP[0]) { result += char; } } else { // 当字符为一同时单位为十,此时可以不用带上字符,比如:10,100, 1000这类整数,转换后应该为十,一百,一千 if (CN_NUM_MAP[1] === char && unit === UNITS[1]) { result += unit; } else { result += char + unit; } } } if (result[result.length - 1] === CN_NUM_MAP[0]) { result = result.slice(0, -1); } return result; } function convertToChineseMoneyFormat(num) { if (!num) return num; let result = ""; const numStr = num.toString().split("."); let [integer, digit] = numStr; integer = Math.abs(integer); if (integer > 0) { const arr = integer .toString() .replace(/(?=(\d{4})+$)/g, ",") .split(",") .filter(Boolean); for (let i = 0; i < arr.length; i++) { const part = arr[i]; const char = _transform(part); const unit = char ? BIG_UNITS[arr.length - i - 1] : ""; result += (char + unit); } result += RMB; } if (num - integer === 0) { // 整数 result += Z; } else { // 小数部分 for (let i = 0; i < digit.length; i++) { if (digit[i] !== "0") { result += (CN_NUM_MAP[digit[i]] + DIGITS_UNITS[i]); } else if (digit[0] !== '0') { result += CN_NUM_MAP[digit[i]]; } } } if (num < 0) { return SIGN + F + result; } return SIGN + result; } void (async function () { // Write your code here while ((str = await readline())) { console.log(convertToChineseMoneyFormat(Number.parseFloat(str))); } })();