前几天用网银给朋友转账,在金额一栏中输入阿拉伯数字,右边会立即显示出相应的汉语数字大写。感觉挺有意思,就到网上搜索一下现成代码(没怎么仔细找),找到一段 Java 的和一段 C# 的。不过感觉它们的实现都很繁琐,或者说不够优雅。最重要的是功能上有缺陷,比如 100 被翻译成“壹佰零拾零”,在汉语中我们习惯说“壹佰元整”。所以,就考虑自己动手写一个小程序。
我现在也有点思维定势了:一提起处理文本,脑海中闪过的就是正则表达式,一想到正则表达式,就联想到 Perl,然后就是想到了正则方面和它能相媲美的 JavaScript……
下面是我的代码,目前只处理正整数。
function digit_uppercase(n) { var digit = [ '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' ]; var unit = [ ['元', '万', '亿'], ['', '拾', '佰', '仟'] ]; var s = ''; for (var i = 0; i < unit[0].length && n > 0; i++) { var p = ''; for (var j = 0; j < unit[1].length && n > 0; j++) { p = digit[n % 10] + unit[1][j] + p; n = Math.floor(n / 10); } s = p.replace(/(零.)*零$/, '') .replace(/^$/, '零') + unit[0][i] + s; } return s.replace(/(零.)*零元/, '元') .replace(/(零.)+/g, '零') .replace(/^$/, '零元') + '整'; }
功能测试
alert(digit_uppercase(0)); // 零元整 alert(digit_uppercase(123)); // 壹佰贰拾叁元整 alert(digit_uppercase(1000000)); // 壹佰万元整 alert(digit_uppercase(100000001)); // 壹亿零壹元整 alert(digit_uppercase(1000000000)); // 壹拾亿元整 alert(digit_uppercase(1234567890)); // 壹拾贰亿叁仟肆佰伍拾陆万柒仟捌佰玖拾元整 alert(digit_uppercase(1001100101)); // 壹拾亿零壹佰壹拾万零壹佰零壹元整 alert(digit_uppercase(110101010)); // 壹亿壹仟零壹拾万壹仟零壹拾元整
版权声明
为方便其他朋友提问和指正,转载是请保持文章完整性,并以超链接形式注明原始作者“redraiment ”和主站点 地址,谢谢。
联系方式
我的邮箱,欢迎来信(redraiment@gmail.com )
我的CSDN博客(梦婷轩 ):http://blog.csdn.net/redraiment
我的百度空间(梦婷轩 ):http://hi.baidu.com/redraiment