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;
	  }
}

實現效果:

如有不妥之處歡迎指正,感謝支持!

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