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

public class Change {
     public static 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 ));  // 负壹亿壹仟零壹拾万壹仟零壹拾元壹角
     }
     
     /**
      * 数字金额大写转换,思想先写个完整的然后将如零拾替换成零
      * 要用到正则表达式
      */
     public static String digitUppercase( double n){
         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 = "整" ;   
         }
         int integerPart = ( 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;
         }
         return head + 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(/^元/, "零元");  
  • };  
      
    • 0
      点赞
    • 0
      收藏
      觉得还不错? 一键收藏
    • 0
      评论
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值