数字转换为大写金额

/**
  * 将x转换为大写金额形式
  *
  * @param x
  */
 public static String fun(String x) {
  StringBuffer sb = new StringBuffer();
  //判断是否有小数点
  int point = x.indexOf(".");
  int nLen = x.length();
  //截取小数点前的位数
  if (point != -1) {
   nLen = point;
  }
  //支持数字到千亿,即12位整数+“."+X角Y分
  char[] units = { '仟', '佰', '拾', '亿',
    '仟', '佰', '拾', '万',
    '仟', '佰', '拾',
    '元', '角', '分' };
  char[] digits = { '零', '壹', '贰', '叁', '肆',
    '伍', '陆', '柒', '捌', '玖' };
  int len = units.length;
  //处理小数点前的数字
  for (int i = 0; i < nLen; i++) {
   int d = x.charAt(i) - '0';
   sb.append(digits[d]);
   int index = len - 2 - nLen + i;
   sb.append(units[index]);
  }
  //转换“角,分”
  if (nLen < x.length()) {
   int jIndex=x.charAt(nLen + 1) - '0';
   if(jIndex!=0)
   {
    sb.append(digits[jIndex]);
    sb.append(units[len - 2]);
   }
   int fIndex=x.charAt(nLen + 2) - '0';
   if(fIndex!=0)
   {
    sb.append(digits[fIndex]);
    sb.append(units[len - 1]);
   }
   
  }else
   sb.append("整");

  boolean yes=true;
  //循环去掉多余的零
  while(yes){
   yes=false;
   
   int i1 = sb.indexOf("零仟");

   if (i1 != -1) {
    sb.deleteCharAt(i1 + 1);
    yes=true;

   }
   int i2 = sb.indexOf("零佰");
   if (i2 != -1)
    {
     sb.deleteCharAt(i2 + 1);
     yes=true;
    }

   int i3 = sb.indexOf("零拾");
   if (i3 != -1)
    {
     sb.deleteCharAt(i3 + 1);
     yes=true;
    }

   int zz = sb.indexOf("零零");
   if (zz != -1)
    {
    sb.deleteCharAt(zz);
    yes=true;
    }
   int lyi=sb.indexOf("零亿");
   if(lyi!=-1)
    {
    sb.deleteCharAt(lyi);
    yes=true;
    }
   int lw = sb.indexOf("零万");
   
   if(lw!=-1)
    {
    sb.deleteCharAt(lw);
    yes=true;
    }
   int ly = sb.indexOf("零元");
   if(ly!=-1)
   {
    sb.deleteCharAt(ly);
    yes=true;
   }
   int y=sb.indexOf("亿");
   if(y==0)
    sb.deleteCharAt(y);
   int w=sb.indexOf("万");
   if(w==0)
    sb.deleteCharAt(w);
  }
  
  return sb.toString();
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值