將浮點數轉換成人民幣讀法字串(JAVA)
阿新 • • 發佈:2019-01-24
public class NumRmb{ private String[] hanArr = {"零" , "壹" , "貳" , "叄" , "肆" , "伍" , "陸" , "柒", "捌" , "玖"}; private String[] unitArr = {"分" , "角" , "元" , "十" , "百", "千"}; private String divide(double num){ long zheng = (long)num; long xiao = Math.round((num - zheng)*100); return zheng + "" + xiao; } /** * 把一個七位的數字字串變成漢字字串 * @param numStr 需要被轉換的七位數字字串 * @return 七位的數字字串被轉換成漢字字串 */ private String toHanStr(String numStr){ String result = ""; //得到數字字串的整數值 int numZheng = Integer.parseInt(numStr); //如果整數是零則直接返回零 if(numZheng == 0) return "零"; int numLen = numStr.length(); //依次遍歷數字字串的每一個數字 for(int i = 0 ; i < numLen ; i++){ //把char型數字轉換成int型數字,因為它們的ASCII碼值正好相差48 //因此把char型數字減去48得到int型數字 int num = numStr.charAt(i) - 48; //如果零,則需要新增單位(千,百,十) if(num != 0){ result += hanArr[num] + unitArr[numLen - i -1]; } //如果是零,則需要判斷這個是不是高位的零例如0068,或者是不是低位的零如6800。 //如果是高位的零或者低位的零,則不用處理 //如果不是高位或低位的零,則應該判斷是否連續出現了多個零 //如果出現連續的多個零則只加上一個漢字零即可 else if(num == 0){ int temp1 = numZheng; int temp2 = numZheng; for(int j=i;j < numLen-1;j++){ temp1 = temp1/10; temp2 = temp2%10; } //temp1為0表示是高位的零,temp2為零或numZheng表示是低位的零(最後一位是零比較特殊) //如果最後一位為零則temp2為numZheng if(temp1 == 0 || temp2 == 0 || temp2 == numZheng){} else{ int temp3 = numStr.charAt(i-1) - 48; //System.out.println(temp3); if(temp3 == 0){} else{ result += hanArr[num]; } } } } return result; } public static void main(String[] args){ NumRmb nr = new NumRmb(); System.out.println(nr.toHanStr(nr.divide(1006.333))); } }