java小程序:阿拉伯数字金额转化为中国文字数字表示的金额

闲着无聊,自己写了一个 阿拉伯数字转化为中国文字数字,望大家多多指正

package test;

public class NumberRev {
 public String ReverseToCn(String num) {
  char firstNum;// 第一个数字
  char point;// 寻找小数点
  String returnString = "";// 返回值
  // 提取数字部分
  int i = 0;
  for (; i < num.length(); i++) {
   firstNum = num.charAt(i);
   if (isNumber(String.valueOf(firstNum)))
    break;
   if (i == (num.length() - 1))
    return "所转换的字符不合法";
  }
  String realNum = num.substring(i, num.length());
  String beforePoint = realNum;
  String afterPoint = null;
  // 分别提取整数和小数部分
  for (int j = 0; j < num.length(); j++) {
   point = num.charAt(j);
   if (String.valueOf(point).equals(".")) {
    beforePoint = num.substring(i, j);
    afterPoint = num.substring(j + 1, num.length());
    break;
   }
  }
  // 显示为中文
  for (int k = 0; k < beforePoint.length(); k++) {
   String getCn = getCn(beforePoint.substring(k, k + 1));
   if (!getCn.equals("零")) {// 非零情况
    returnString += getCn;
    returnString += getBit(beforePoint.length() - k);
   } else if (!zeroIsLast(beforePoint, k)
     && (!String.valueOf(beforePoint.charAt(k - 1)).equals("0"))) {
    // 有零的情况,且零在数字中间,且上一个数字不是零
    returnString += "零";
   }
  }
  returnString+="元";
  //小数点后的数字
  if(afterPoint!=null){
   for(int k=0;k<afterPoint.length();k++){    
    returnString+=getCn(String.valueOf(afterPoint.charAt(k)));
    if(k==0)
     returnString+="角";
    if(k==1)
     returnString+="分";
   }
  }else{
   returnString+="整";
  }
  
  return returnString;
 }

 public boolean zeroIsLast(String num, int zeroLocation) {// 判断零的位置
  if (zeroLocation == (num.length() - 1))// 零在末尾
   return true;
  for (; zeroLocation < num.length(); zeroLocation++) {
   if (!String.valueOf(num.charAt(zeroLocation)).equals("0")) {// 只要零后面有非零的数就立即返回
    return false;
   }
  }
  return true;
 }

 public String getBit(int num) {
  String word = "";
  switch (num) {
  case 2:
   word = "拾";
   break;
  case 3:
   word = "佰";
   break;
  case 4:
   word = "仟";
   break;
  case 5:
   word = "万";
   break;
  case 6:
   word = "拾";
   break;
  case 7:
   word = "佰";
   break;
  case 8:
   word = "仟";
   break;
  case 9:
   word = "亿";
   break;
  case 10:
   word = "拾";
   break;
  case 11:
   word = "百";
   break;
  case 12:
   word = "千";
   break;
  }
  return word;
 }

 public String getCn(String num) {
  int n = Integer.valueOf(num);
  String cn = "";
  switch (n) {
  case 0:
   cn = "零";
   break;
  case 1:
   cn = "壹";
   break;
  case 2:
   cn = "贰";
   break;
  case 3:
   cn = "叁";
   break;
  case 4:
   cn = "肆";
   break;
  case 5:
   cn = "伍";
   break;
  case 6:
   cn = "陆";
   break;
  case 7:
   cn = "柒";
   break;
  case 8:
   cn = "捌";
   break;
  case 9:
   cn = "玖";
   break;
  }
  return cn;
 }

 public boolean isNumber(String word) {
  if (word.length() != 1)
   return false;
  if (word.equals("1") || word.equals("2") || word.equals("3")
    || word.equals("4") || word.equals("5") || word.equals("6")
    || word.equals("7") || word.equals("8") || word.equals("9")
    || word.equals("0"))
   return true;
  return false;
 }

 public static void main(String[] args) {
  NumberRev n = new NumberRev();
  System.out.println(n.ReverseToCn("¥45870014.458"));
  System.out.println(n.ReverseToCn("¥458700140458"));
 }
}

结果为:
肆仟伍佰捌拾柒万零壹拾肆元肆角伍分捌
肆千伍百捌拾柒亿零壹拾肆万零肆佰伍拾捌元整

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值