【算法题】将十二位之内的数字转为汉字输出
// 单位,末尾 个 省略 const charUnitArr = ['千', '百', '十', '亿', '千', '百', '十', '万', '千', '百', '十', '']; // 数字 0-9的 汉字写法 const chartNumberArr = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']; function transformToCharNumber(number) { if (isNaN(parseInt(number))) {
console.error('请输入数字'); return number; } const numberStrArr = number.toString().split(''); // 超过12位的不纳入计算范围内 if (numberStrArr.length > 12) { console.error('数字过大'); return number; } // 数字汉化 const numberCharArr = numberStrArr.map((ele) => chartNumberArr[+ele]); const numberStrArrLength = numberCharArr.length; // 裁取对应数字位数的单位 const unitArr = charUnitArr.slice(-numberStrArrLength); // 数字加上对应位数的单位 const tempNumberWithUnitArr = numberCharArr.map((ele, index) => { return `${ele}${unitArr[index]}`; }); // 保留数字类型 const numberArr = numberStrArr.map((ele) => +ele); // 做去“零”处理 const resultStr = numberArr.map((ele, index) => { if (ele !== 0 || (ele === 0 && numberArr.length === 1)) return tempNumberWithUnitArr[index]; if (numberArr[index - 1] === 0 && numberArr[index + 1] !== 0) { const [num, unit] = tempNumberWithUnitArr[index].split(''); return num; } if (numberArr[index] === 0) { const [num, unit] = tempNumberWithUnitArr[index].split(''); if (unit === '亿' || unit === '万') { return unit; } } return ''; }) // 去零处理后避免出现亿万连续 let returnStr = resultStr.join('').replace('亿万', '亿'); // 符合常用习惯 if (returnStr.slice(0, 2) === '壹十') { returnStr = returnStr.slice(1); } // 当个位数大于一位,去掉末尾的零, if (returnStr.length > 1) { returnStr = returnStr.replace(/[零.]$/, ''); } return returnStr; } const testArr = [10, 0, 100, 1000008, 300001008, 100000, 123, 654646, 8778799, 54684897894, 945468489789, null, undefined, 'adad']; testArr.forEach((ele) => { console.log(ele, transformToCharNumber(ele)); })
代码运行结果如下