阿萌的程序小屋

萌物控重度患者与您一起畅游技术与梦想的世界

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));

输出结果:壹佰贰拾叁元叁角肆分

如有朋友感觉我的博文或代码有问题,愿能给予我宝贵的意见!Thanks

另注:转载请随意,但请带上本文地址,万分感谢。

http://www.wangmengyu.cn/?p=438

这就是真的真的是传说中的公告牌的说~~
暂且努力发展中~~

性别:男  年龄:20岁
现居:江苏  南京  浦口区
标语:萌即是一切