数字转中文大写金额

17 篇文章 0 订阅

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class UpperCaseMoney {
 private static int n = 0;

 public static void main(String[] args) {
  String money;
  do {
   money = getNum();
  } while ((money != null && !(money.matches("[0-9]+.[0-9]*") || money
    .matches("[0-9]*"))) || money == null);
  // 把它转为大写的金额
  String je = toUpperMoney(money);
  System.out.println("RMB:" + je);
 }

 private static String toUpperMoney(String money) {
  char[] upper = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' };
  String[] w = { "", "拾", "佰", "仟", "万", "拾万", "佰万", "仟万", "亿", "拾亿",
    "佰亿", "仟亿", "万亿" };
  // 如果是小数则要最少要小数点后有两位
  while (money.contains(".") && money.length() - money.indexOf('.') < 3) {
   money = money + "0";
  }
  if (money.contains("."))
   money = money.substring(0, money.indexOf('.') + 3);
  char[] m = money.toCharArray();
  if (money.charAt(0) == '0' && Double.parseDouble(money) > 0) {
   // 金额小于1元
   char fen = upper[m[m.length - 1] - '0'];
   char jiao = upper[m[m.length - 2] - '0'];
   if (fen != '零' && jiao != '零') {
    return jiao + "角" + fen + "分";
   } else if (fen == '零') {
    return jiao + "角";
   } else {
    return fen + "分";
   }
  } else if (Double.parseDouble(money) == 0) {
   return upper[0] + "元整";
  } else if (!money.contains(".") && !(money.charAt(0) == '0')) {
   // 金额是整的并且大于1元
   // 判断长度:只取13位也就是万亿
   if (m.length > 13)
    return "大于13位不处理!";
   StringBuffer sb = new StringBuffer();
   for (int i = 0; i < m.length; i++) {
    sb.append(upper[m[i] - '0']);
    sb.append(w[m.length - i - 1]);
   }
   String zjr = sb.toString();
   // 把多的万、亿、零除掉
   int index = zjr.lastIndexOf('万');
   String sub;
   if (index != -1) {
    sub = zjr.substring(0, index).replaceAll("万", "");
    zjr = sub + zjr.substring(index);
   }
   index = zjr.lastIndexOf('亿');
   if (index != -1) {
    sub = zjr.substring(0, index).replaceAll("亿", "");
    zjr = sub + zjr.substring(index);
   }
   if (zjr.contains("零亿")) {
    zjr = zjr.replace("零亿", "亿");
   }
   if (!zjr.contains("亿")) {
    zjr = zjr.replaceAll("零万", "万");
   }
   zjr = zjr.replaceAll("零仟|零佰|零拾", "").replaceAll("零万", "零");
   if (zjr.charAt(zjr.length() - 1) == '零') {
    zjr = zjr.substring(0, zjr.length() - 1);
   }

   return zjr + "元整";
  } else {
   int index = money.indexOf(".");
   String zjr = toUpperMoney(money.substring(0, index)).replaceAll(
     "元整", "")
     + toUpperMoney("0" + money.substring(index, money.length()));
   return zjr;
  }
 }

 private static String getNum() {
  if (n == 0)
   System.out.print("请输入你的金额:");
  else
   System.out.print("请正确输入你的金额:");

  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  try {
   return br.readLine();
  } catch (Exception e) {
   n++;
   return null;
  }

 }
}

 

 

import java.math.BigDecimal;

public class UpperStr {
    public static void main(String[] args){
        String upperStr[] = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
        String splitStr[] = {"","十","百","千","万","拾万","百万","千万","亿","十亿","百亿","千亿","兆","十兆","百兆","千兆"};
        //需要转换的数据源
        String lowerStr = "12345678.45";
        int flag = 0;
        //对源字符串进行行处理
        if("-".equals(lowerStr.charAt(0)+"")){
            lowerStr = lowerStr.substring(1);
            flag = 1;
        }
        if ("+".equals(lowerStr.charAt(0) + "")) {
            lowerStr = lowerStr.substring(1);
        }
        //字符串的截取
        int point = lowerStr.indexOf('.');
        String zstr = lowerStr; //整数部分
        String lstr = "";   //小数部分
        if(point != -1) {
            zstr = lowerStr.substring(0, point);
            lstr = lowerStr.substring(point);
        } else{
            zstr = lowerStr;
            lstr = "";
        }
        //返回结果
        String result = "";
        int tmp = -1;
        int totallen = zstr.length();
        for(int i = 0 ;i<totallen;i++){
            if(i>=1) {
                tmp = Integer.parseInt(zstr.charAt(i - 1) + "");
            }
            int index = Integer.parseInt(zstr.charAt(i) + "");
            if(tmp == index && index == 0){
                continue;
            }
            if("零".equals(upperStr[index]))
                result += upperStr[index];
            else{
                if( splitStr[totallen - i - 1].length()<1)
                    result += upperStr[index] + splitStr[totallen - i - 1];
                else
                    result += upperStr[index] + splitStr[totallen - i - 1].substring(0,1);
            }

        }
        if("零".equals(result.charAt(0)+"") && result.length()>1)
            result = result.substring(1);
        //再处理小数部分
        //判断是否存在小数部分
        totallen = lstr.length();
        BigDecimal b = new BigDecimal(0);
        if(totallen>1){
            BigDecimal bd = new BigDecimal(lstr.substring(1));
            if(bd.compareTo(b) != 0){
                result += "点";
                for(int i = 1;i<totallen;i++){
                    int index = Integer.parseInt(lstr.charAt(i) + "");
                    result +=  upperStr[index];
                }
            }
        }
        if(flag == 1 && !"零".equals(result))
            result = "负" + result;
        //再做一次替换处理
        System.out.println(result);
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值