2015-06-21 00:31
JavaScript数字金额转换成中文大写形式显示的简单实例
在某些涉及金钱的网站中,通常会有着打印输出或者报表中,要求金额显示为中文大写形式(例:壹佰贰拾叁元壹角贰分),为了方便输入,我们使用通过利用javascript实现数字金额转换成中文大写的形式。阿萌此次来介绍一种比较简单的实现逻辑。
那么我们还是和平常一样说下原理吧,然后再放代码。
首先,我们既然是替换,就要准备好所需要的中文大写字符串,用作替换相应的数字和位数,变量分别分为三部分:数字,小数,单位名。
第二,我们要考虑是负数的情况,对于金额来说,小余0就是欠款,所以我们先把代入的数字判断是否小余0,如小余0的话就在结果字符串中先输入“欠”。
第三,我们考虑小数的情况,对于金额来说,小数最多也就两位数,那么先将数字整体乘100,再通过计算取出后两位,分别添加后缀“角”和“分”,如果都为0则添加后缀“整”。
最后,我们就可以通过一定的算法来替换相应的位数与添加相应的后缀就好了。
下面放代码:
<script type="text/javascript"> function digit_conversion(n) { var fraction = ['角', '分']; var digit = [ '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' ]; var unit = [ ['元', '万', '亿'], ['', '拾', '佰', '仟'] ]; var head = n < 0? '欠': ''; n = Math.abs(n); var s = ''; for (var i = 0; i < fraction.length; i++) { s += (digit[Math.floor(n * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, ''); } s = s || '整'; n = Math.floor(n); alert(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 head + s.replace(/(零.)*零元/, '元') .replace(/(零.)+/g, '零') .replace(/^整$/, '零元整'); } </script>
测试样例:alert(digit_conversion (123.34));
输出结果:壹佰贰拾叁元叁角肆分