数字金额和汉字金额大写转换【前段+后台】

本文介绍了一种将数字金额转换为中文大写形式的方法,包括整数、小数及负数的转换,并提供了Java和JavaScript两种实现方式。
public class Change {
    publicstatic void main(String agrs[]) {
        //整数
        System.out.println(digitUppercase(0));             // 零元整
        System.out.println(digitUppercase(123));           // 壹佰贰拾叁元整
        System.out.println(digitUppercase(1000000));       // 壹佰万元整
        System.out.println(digitUppercase(100000001));     // 壹亿零壹元整
        System.out.println(digitUppercase(1000000000));    // 壹拾亿元整
        System.out.println(digitUppercase(1234567890));    // 壹拾贰亿叁仟肆佰伍拾陆万柒仟捌佰玖拾元整
        System.out.println(digitUppercase(1001100101));    // 壹拾亿零壹佰壹拾万零壹佰零壹元整
        System.out.println(digitUppercase(110101010));     // 壹亿壹仟零壹拾万壹仟零壹拾元整
     
        //小数
        System.out.println(digitUppercase(0.12));         // 壹角贰分
        System.out.println(digitUppercase(123.34));       // 壹佰贰拾叁元叁角肆分
        System.out.println(digitUppercase(1000000.56));   // 壹佰万元伍角陆分
        System.out.println(digitUppercase(100000001.78)); // 壹亿零壹元柒角捌分
        System.out.println(digitUppercase(1000000000.90));// 壹拾亿元玖角
        System.out.println(digitUppercase(1234567890.03));// 壹拾贰亿叁仟肆佰伍拾陆万柒仟捌佰玖拾元叁分
        System.out.println(digitUppercase(1001100101.00));// 壹拾亿零壹佰壹拾万零壹佰零壹元整
        System.out.println(digitUppercase(110101010.10)); // 壹亿壹仟零壹拾万壹仟零壹拾元壹角
         
        //负数
        System.out.println(digitUppercase(-0.12));         // 负壹角贰分
        System.out.println(digitUppercase(-123.34));       // 负壹佰贰拾叁元叁角肆分
        System.out.println(digitUppercase(-1000000.56));   // 负壹佰万元伍角陆分
        System.out.println(digitUppercase(-100000001.78)); // 负壹亿零壹元柒角捌分
        System.out.println(digitUppercase(-1000000000.90));// 负壹拾亿元玖角
        System.out.println(digitUppercase(-1234567890.03));// 负壹拾贰亿叁仟肆佰伍拾陆万柒仟捌佰玖拾元叁分
        System.out.println(digitUppercase(-1001100101.00));// 负壹拾亿零壹佰壹拾万零壹佰零壹元整
        System.out.println(digitUppercase(-110101010.10)); // 负壹亿壹仟零壹拾万壹仟零壹拾元壹角
    }
     
    /**
     * 数字金额大写转换,思想先写个完整的然后将如零拾替换成零
     * 要用到正则表达式
     */
    publicstatic String digitUppercase(doublen){
        String fraction[] = {"角","分"};
        String digit[] = {"零", "壹","贰", "叁","肆", "伍","陆", "柒","捌", "玖"};
        String unit[][] = {{"元","万", "亿"},
                     {"","拾", "佰","仟"}};
 
        String head = n <0? "负":"";
        n = Math.abs(n);
         
        String s ="";
        for(int i = 0; i < fraction.length; i++) {
            s += (digit[(int)(Math.floor(n *10 * Math.pow(10, i)) %10)] + fraction[i]).replaceAll("(零.)+","");
        }
        if(s.length()<1){
            s ="整";   
        }
        intintegerPart = (int)Math.floor(n);
 
        for(int i = 0; i < unit[0].length && integerPart >0; i++) {
            String p ="";
            for(int j = 0; j < unit[1].length && n >0; j++) {
                p = digit[integerPart%10]+unit[1][j] + p;
                integerPart = integerPart/10;
            }
            s = p.replaceAll("(零.)*零$","").replaceAll("^$","零") + unit[0][i] + s;
        }
        returnhead + s.replaceAll("(零.)*零元","元").replaceFirst("(零.)+","").replaceAll("(零.)+","零").replaceAll("^整$","零元整");
    }
}




前段:
  1. var DX = function (num) {  
  2.   var strOutput = "";  
  •   var strUnit = '仟佰拾亿仟佰拾万仟佰拾元角分';  
  •   num += "00";  
  •   var intPos = num.indexOf('.');  
  •   if (intPos >= 0)  
  •     num = num.substring(0, intPos) + num.substr(intPos + 1, 2);  
  •   strUnit = strUnit.substr(strUnit.length - num.length);  
  •   for (var i=0; i < num.length; i++)  
  •     strOutput += '零壹贰叁肆伍陆柒捌玖'.substr(num.substr(i,1),1) + strUnit.substr(i,1);  
  •     return strOutput.replace(/零角零分$/, '整').replace(/零[仟佰拾]/g, '零').replace(/零{2,}/g, '零').replace(/零([亿|万])/g, '$1').replace(/零+元/, '元').replace(/亿零{0,3}万/, '亿').replace(/^元/, "零元");  
  • };  
      
    评论
    成就一亿技术人!
    拼手气红包6.0元
    还能输入1000个字符
     
    红包 添加红包
    表情包 插入表情
     条评论被折叠 查看
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值