java数字大写转换小程序

//数字转换成大写并返回
     public  static  String changeToBig(  double  value){

         char [] hunit = {  '拾' ,  '佰' ,  '仟'  };  // 段内位置表示
         char [] vunit = {  '万' ,  '亿'  };  // 段名表示
         char [] digit = {  '零' ,  '壹' ,  '贰' ,  '叁' ,  '肆' ,  '伍' ,  '陆' ,  '柒' ,  '捌' ,  '玖'  };  // 数字表示
         long  midVal = (  long ) (value * 100+0.5);  // 转化成整形,四舍五入
        String valStr = String. valueOf(midVal);  // 转化成字符串
        String head = valStr.substring(0, valStr.length() - 2);  // 取整数部分
        String rail = valStr.substring(valStr.length() - 2);  // 取小数部分
 
        String prefix =  "" ;  // 整数部分转化的结果
        String suffix =  "" ;  // 小数部分转化的结果
         // 处理小数点后面的数
         if  (rail.equals(  "00" )) {  // 如果小数部分为0
            suffix =  "整" ;
        }  else  {
            suffix = digit[rail.charAt(0) -  '0' ] +  "角"
                    + digit[rail.charAt(1) -  '0' ] +  "分" ;  // 否则把角分转化出来
        }
         // 处理小数点前面的数
         char [] chDig = head.toCharArray();  // 把整数部分转化成字符数组
         boolean  preZero =  false ;  // 标志当前位的上一位是否为有效0位(如万位的0对千位无效)
         byte  zeroSerNum = 0;  // 连续出现0的次数
         for  ( int  i = 0; i < chDig.  length ; i++) {  // 循环处理每个数字
             int  idx = (chDig.  length  - i - 1) % 4;  // 取段内位置
             int  vidx = (chDig.  length  - i - 1) / 4;  // 取段位置
 
             if  (chDig[i] ==  '0' ) {  // 如果当前字符是0
                preZero =  true ;
                zeroSerNum++;  // 连续0次数递增
                 if  (idx == 0 && vidx > 0 && zeroSerNum < 4) {
                    prefix += vunit[vidx - 1];
                    preZero =  false ;  // 不管上一位是否为0,置为无效0位
                }
            }
             else  {
                zeroSerNum = 0;  // 连续0次数清零
                 if  (preZero) {  // 上一位为有效0位
                    prefix += digit[0];  // 只有在这地方用到'零'
                    preZero =  false ;
                }
                prefix += digit[chDig[i] -  '0' ];  // 转化该数字表示
                 if  (idx > 0)
                    prefix += hunit[idx - 1];
                 if  (idx == 0 && vidx > 0) {
                        prefix+=vunit[(vidx+1)%2];
                         for (  int  j=0;j<(vidx+1)/2-1;j++){
                            prefix+=vunit[1];
                        }
                }
            }
        }
         if  (prefix.length() > 0)
            prefix +=  '圆' ;  // 如果整数部分存在,则有圆的字样
         return  prefix + suffix;  // 返回正确表示

      }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值