Java笔记——Java 实现金额小写转大写

Java 实现金额小写转大写

话不多说,放码出来。。。

package oracleTestProject;

import java.text.DecimalFormat;

public class MyTest2020040501 {
	
	public static void main(String[] args) throws Exception {
		try {
			
			String str = numberToChinese(3123214.70);
			System.out.println(str);
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}

	public static String numberToChinese(double paramDouble) {
	    DecimalFormat localDecimalFormat = new DecimalFormat("############0.00");
	    String str1 = localDecimalFormat.format(paramDouble);

	    int i = str1.indexOf(".");
	    if (str1.substring(i).compareTo(".00") == 0) {//如果小数位全是0,直接截掉小数点和小数位数字
	      str1 = str1.substring(0, i);
	    }
	    String IntStr = "";//整数位字符串
	    String[] arrayOfString1 = new String[4];
	    String[] arrayOfString2 = new String[4];
	    String[] arrayOfString3 = new String[2];
	    String[] NumberOfChinese = new String[10];
	    String str3 = "";
	    String str4 = "";//小数位字符串
	    String sChineseStr = "";//返回大写金额字符串
	    String sYuan = "元";
	    String sZheng = "整";
	    int j = 0;
	    int k = 0;
	    int m = 0;

	    arrayOfString1[0] = "";
	    arrayOfString1[1] = "拾";
	    arrayOfString1[2] = "佰";
	    arrayOfString1[3] = "仟";
	    arrayOfString2[0] = "";
	    arrayOfString2[1] = "万";
	    arrayOfString2[2] = "亿";
	    arrayOfString2[3] = "万";
	    arrayOfString3[0] = "分";
	    arrayOfString3[1] = "角";
	    
	    
	    NumberOfChinese[0] = "零";
	    NumberOfChinese[1] = "壹";
	    NumberOfChinese[2] = "贰";
	    NumberOfChinese[3] = "叁";
	    NumberOfChinese[4] = "肆";
	    NumberOfChinese[5] = "伍";
	    NumberOfChinese[6] = "陆";
	    NumberOfChinese[7] = "柒";
	    NumberOfChinese[8] = "捌";
	    NumberOfChinese[9] = "玖";
	    
	    //小数位整数位都为0,返回零元整
	    if ((str1.compareTo("0") == 0) || (str1.compareTo("0.0") == 0) || (str1.compareTo("0.00") == 0)) {
	      sChineseStr = NumberOfChinese[0] + sYuan + sZheng;
	      return sChineseStr;
	    }if (str1.indexOf(".") > 0){//整数位小数位都不为0的
	      IntStr = str1.substring(0, str1.indexOf("."));//Instr='123214'
	    }else{//整数位不为0小数位为0
	      IntStr = str1;
	    }
	    
	    /******************************整数位转换计算开始******************************/
	    //四位一份,        
	    j = IntStr.length() % 4 != 0 ? IntStr.length() / 4 + 1 : IntStr.length() / 4;
	    int i1;
	    for (int n = j; n >= 1; n--) {
	      if ((n == j) && (IntStr.length() % 4 != 0)){
	        m = IntStr.length() % 4;
	      }else{
	        m = 4;
	      }
	      str3 = IntStr.substring(k, k + m);
	      for (i1 = 0; i1 < str3.length(); i1++) {
	    	int inum = Integer.parseInt(str3.substring(i1, i1 + 1));
	        if (inum != 0) {
	        	sChineseStr = sChineseStr + NumberOfChinese[inum] + arrayOfString1[(str3.length() - i1 - 1)];
	        }else if ((i1 + 1 < str3.length()) && (str3.charAt(i1 + 1) != '0')){
	        	sChineseStr = sChineseStr + NumberOfChinese[0];
	        }
	      }
	      k += m;
	      if (n < j)  {
	        if ((Integer.parseInt(str3.substring(str3.length() - 1, str3.length())) != 0) || (Integer.parseInt(str3.substring(str3.length() - 2, str3.length() - 1)) != 0) || (Integer.parseInt(str3.substring(str3.length() - 3, str3.length() - 2)) != 0) || (Integer.parseInt(str3.substring(str3.length() - 4, str3.length() - 3)) != 0)){
	          sChineseStr = sChineseStr + arrayOfString2[(n - 1)];
	        }
	      }
	      else sChineseStr = sChineseStr + arrayOfString2[(n - 1)];
	    }
	    
	    if (sChineseStr.length() > 0) {
	      sChineseStr = sChineseStr + sYuan;
	    }
	    /***********************整数位转换计算结束*************************************/
	    
	    /***********************小数位转换计算开始*************************************/
	    if (str1.indexOf(".") > 0) {//还存在小数位,说明小数位有非0数字
	      str4 = str1.substring(str1.indexOf(".") + 1);
	      for (i1 = 0; i1 < 2; i1++) {//存在小数位则有两位,
	    	int inum = Integer.parseInt(str4.substring(i1, i1 + 1));
	    	if (inum != 0) {
	        	sChineseStr = sChineseStr + NumberOfChinese[inum] + arrayOfString3[(1 - i1)];
	        } else if (sChineseStr.length() > 0)
	          sChineseStr = sChineseStr + NumberOfChinese[0];
	      }
	    } else {
	      sChineseStr = sChineseStr + sZheng;
	    }
	    /***********************小数位转换计算结束*************************************/
	    
	    /**去掉最后一个零(最后一位是零说明str1有小数位且百分位为0,即有效金额位数到角,没有分后面需要加上“整”)**/
	    if (NumberOfChinese[0].equals(sChineseStr.substring(sChineseStr.length() - 1))){
	    	sChineseStr = sChineseStr.substring(0, sChineseStr.length() - 1) + sZheng;
	    }
	    return sChineseStr;
	  }
}

实现效果:

如有不妥之处欢迎指正,感谢支持!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章