class="java" name="code"> /* 文档密级:秘密 */ package com.str; import java.math.BigDecimal; public class ChangeRMB{ String strCash; int DotPos; public ChangeRMB(){ } public void setCash(String cash){ this.initRMB(cash); } public ChangeRMB(String Cash){ this.initRMB(Cash); } private void initRMB(String Cash){ if(Cash.equals("")){ Cash = "0"; } strCash = Cash; while(strCash.indexOf(",") >= 0){ strCash = strCash.substring(0,strCash.indexOf(",")) + strCash.substring(strCash.indexOf(",") + 1,strCash.length()); } strCash = (new BigDecimal(strCash)) + ""; //得到小数点位置 DotPos = strCash.indexOf("."); //返回小数点的开始位置 if(DotPos == -1){ DotPos = strCash.length(); //判断是否为整数 //只取小数点后二位 } if(DotPos < strCash.length() - 3){ strCash = strCash.substring(0,strCash.indexOf(".") + 3); } if(DotPos == strCash.length() - 2){ strCash = strCash + "0"; } } public String getChnRMB(){ String strRet = ""; //输出大写字符串变量 boolean bFlag = true; //改变对'零'的判断条件变量 boolean zFlag = true; int i; if(Double.parseDouble(strCash) == 0){ return "零"; } //先取小数点后的数 for(i = DotPos + 1;i < strCash.length();i++){ if(Integer.parseInt(strCash.substring(i,i + 1)) != 0){ strRet = strRet + GetNumber(Integer.parseInt(strCash.substring(i,i + 1))) + GetUnit(DotPos - i); zFlag = false; } } //最后位不为'角,分' if(DotPos == -1 || zFlag || DotPos == strCash.length() - 1){ strRet += "整"; } //取小数点前的数,i用作判断位置 for(i = DotPos - 1;i >= 0;i--){ if(Integer.parseInt(strCash.substring(i,i + 1)) != 0){ strRet = GetNumber(Integer.parseInt(strCash.substring(i,i + 1))) + GetUnit(DotPos - i) + strRet; bFlag = false; } else{ if(!bFlag){ strRet = "零" + strRet; } bFlag = true; if(DotPos > 8){ //modified by NT 2003-02-26 //if((DotPos - i == 5 && !strCash.substring(i - 4,i + 1).equals("00000")) || if((DotPos - i == 5 && !strCash.substring(i,DotPos).equals("00000")) || (DotPos - i == 9) || (DotPos - i == 13)){ strRet = GetUnit(DotPos - i) + strRet; } } else{ if((DotPos - i == 5) || (DotPos - i == 9) || (DotPos - i == 13)){ strRet = GetUnit(DotPos - i) + strRet; } } if(DotPos - i == 1){ strRet = "元" + strRet; } } } if(strRet.indexOf("元") == 0){ strRet = strRet.substring(1); } return strRet; } public String GetNumber(int nNum){ String strRet = ""; switch(nNum){ case 0: strRet = "零"; break; case 1: strRet = "壹"; break; case 2: strRet = "贰"; break; case 3: strRet = "叁"; break; case 4: strRet = "肆"; break; case 5: strRet = "伍"; break; case 6: strRet = "陆"; break; case 7: strRet = "柒"; break; case 8: strRet = "捌"; break; case 9: strRet = "玖"; break; } return strRet; } private static String GetUnit(int nUnit){ String strRet = ""; switch(nUnit){ case -2: strRet = "分"; break; case -1: strRet = "角"; break; case 1: strRet = "元"; break; case 2: strRet = "拾"; break; case 3: strRet = "佰"; break; case 4: strRet = "仟"; break; case 5: strRet = "万"; break; case 6: strRet = "拾"; break; case 7: strRet = "佰"; break; case 8: strRet = "仟"; break; case 9: strRet = "亿"; break; case 10: strRet = "拾"; break; case 11: strRet = "佰"; break; case 12: strRet = "仟"; break; case 13: strRet = "万"; break; case 14: strRet = "拾"; break; case 15: strRet = "佰"; break; case 16: strRet = "仟"; break; case 17: strRet = "万"; break; } return strRet; } public String getEngRMB(){ String strRet = ""; //输出大写字符串变量 // boolean bFlag = true; //改变对'零'的判断条件变量 boolean zFlag = true; int i; i = DotPos + 1; if(Double.parseDouble(strCash) == 0){ return null; } //先取小数点后的数 if(DotPos != strCash.length()){ if(Integer.parseInt(strCash.substring(i)) >= 20){ strRet = strRet + GetEngTwoNumber(Integer.parseInt(strCash.substring(i,i + 1))) + GetEngNumber(Integer.parseInt(strCash.substring(i + 1))); zFlag = false; } if(Integer.parseInt(strCash.substring(i)) < 20){ if(Integer.parseInt(strCash.substring(i)) > 10){ strRet = strRet + GetEngOneNumber(Integer.parseInt(strCash.substring(i + 1,i + 2))); zFlag = false; } else{ if(Integer.parseInt(strCash.substring(i)) > 0){ strRet = strRet + GetEngNumber(Integer.parseInt(strCash.substring(i + 1,i + 2))); zFlag = false; } } } } //最后位不为'角,分' if(DotPos == -1 || zFlag){ strRet += " ONLY"; } else{ strRet = " POINT" + strRet; } //取小数点前的数,i用作判断位置 for(i = DotPos - 1;i >= 0;i--){ if(DotPos - i == 1 || DotPos - i == 4 || DotPos - i == 7 || DotPos - i == 10){ if(i > 0){ if(Integer.parseInt(strCash.substring(i - 1,i + 1)) >= 20){ strRet = GetEngTwoNumber(Integer.parseInt(strCash.substring(i - 1,i))) + GetEngNumber(Integer.parseInt(strCash.substring(i,i + 1))) + GetEngUnit(DotPos - i) + strRet; } if(Integer.parseInt(strCash.substring(i - 1,i + 1)) < 20){ if(Integer.parseInt(strCash.substring(i - 1,i + 1)) > 10){ strRet = GetEngOneNumber(Integer.parseInt(strCash.substring(i,i + 1))) + GetEngUnit(DotPos - i) + strRet; } else{ if(Integer.parseInt(strCash.substring(i - 1,i + 1)) > 0){ strRet = GetEngNumber(Integer.parseInt(strCash.substring(i,i + 1))) + GetEngUnit(DotPos - i) + strRet; } if(DotPos - i == 7 && Integer.parseInt(strCash.substring(i - 1,i + 1)) == 0){ strRet = GetEngUnit(DotPos - i) + strRet; } if(DotPos - i == 4 && DotPos < 7 && Integer.parseInt(strCash.substring(i - 1,i + 1)) == 0){ strRet = GetEngUnit(DotPos - i) + strRet; } } } } else{ strRet = GetEngNumber(Integer.parseInt(strCash.substring(i,i + 1))) + GetEngUnit(DotPos - i) + strRet; } } if((DotPos - i == 3) || (DotPos - i == 6) || (DotPos - i == 9)){ if(Integer.parseInt(strCash.substring(i,i + 1)) != 0){ strRet = GetEngNumber(Integer.parseInt(strCash.substring(i,i + 1))) + GetEngUnit(DotPos - i) + strRet; } } } return strRet; } private String GetEngNumber(int nNum){ String strRet = ""; switch(nNum){ case 0: strRet = " TEN"; break; case 1: strRet = " ONE"; break; case 2: strRet = " TWO"; break; case 3: strRet = " THREE"; break; case 4: strRet = " FOUR"; break; case 5: strRet = " FIVE"; break; case 6: strRet = " SIX"; break; case 7: strRet = " SEVEN"; break; case 8: strRet = " EGIHT"; break; case 9: strRet = " NINE"; break; } return strRet; } private String GetEngOneNumber(int nNum){ String strRet = ""; switch(nNum){ case 1: strRet = " ELEVEN "; break; case 2: strRet = " TWELVE "; break; case 3: strRet = " THREETEEN "; break; case 4: strRet = " FOURTEEN "; break; case 5: strRet = " FIVTEEN "; break; case 6: strRet = " SIXTEEN "; break; case 7: strRet = " SEVENTEEN "; break; case 8: strRet = " EGIHTEEN "; break; case 9: strRet = " NINTEEN "; break; } return strRet; } private String GetEngTwoNumber(int nNum){ String strRet = ""; switch(nNum){ case 2: strRet = " TWEENTY"; break; case 3: strRet = " THIRTY"; break; case 4: strRet = " FOURTY"; break; case 5: strRet = " FIVTY"; break; case 6: strRet = " SIXTY"; break; case 7: strRet = " SEVENTY"; break; case 8: strRet = " EGIHTY"; break; case 9: strRet = " NINTY"; break; } return strRet; } private static String GetEngUnit(int nUnit){ String strRet = ""; switch(nUnit){ case 3: strRet = " HUNDRED"; break; case 4: strRet = " THOUSAND"; break; case 6: strRet = " HUNDRED"; break; case 7: strRet = " MIllION"; break; case 9: strRet = " HUNDRED"; break; case 10: strRet = " BILLION"; break; } return strRet; } public static void main(String[] args){ ChangeRMB ChangeRMB1 = new ChangeRMB("103050020"); System.out.println(ChangeRMB1.getChnRMB()); } }