一开始的想法时根据hash去匹配,但是对于0这个就不好判断了
然后,上网查了之后,才知道中文数字其实是有节单位的
个 十 百 千
万 十万 百万 千万
亿 十亿 百亿 千亿
万亿 十万亿 百万亿 千万亿
….
以此类推
var chnNumChar = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
var chnUnitSection = ['', '万', '亿', '万亿', '亿亿'];
var chnUnitChar = ['', '十', '百', '千'];
function SectionToChinese(section) { var strIns = '', chnStr = ''; var unitPos = 0; var zero = true; while (section > 0) { var v = section % 10; if (v === 0) { if (!zero) { zero = true; chnStr = chnNumChar[v] + chnStr; } } else { zero = false; strIns = chnNumChar[v]; strIns += chnUnitChar[unitPos]; chnStr = strIns + chnStr; } unitPos++; section = Math.floor(section / 10); } return chnStr; } function NumberToChinese(num) { var unitPos = 0; var strIns = '', chnStr = ''; var needZero = false; if (num === 0) { return chnNumChar[0]; } while (num > 0) { var section = num % 10000; if (needZero) { chnStr = chnNumChar[0] + chnStr; } strIns = SectionToChinese(section); strIns += section !== 0 ? chnUnitSection[unitPos] : chnUnitSection[0]; chnStr = strIns + chnStr; needZero = section < 1000 && section > 0; num = Math.floor(num / 10000); unitPos++; }
return chnStr; }
const a = 10009908; const b = 999;
const c = 99091023400043; console.log(NumberToChinese(a)); console.log(NumberToChinese(b)); console.log(NumberToChinese(c));
|