⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rmbconvert.java

📁 人民币从小写转换到大写 支持无限位数
💻 JAVA
字号:
package rmbconvert;
/**
 * @brief 规律:
 * 		1)对于 ”个十百千“ 在读法中会在每个四位出现一组,因此每次要对四位进行处理,判断具体哪位有数字
 * 		2)对于 ”万“ 从第五位开始(数组标号为4)出现4位后,每隔4位出现一次
 *      3)对于 ”亿“ 从第九位开始(数组标号为8)出现8位后,每8位再增加一个”亿“字
 */
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class rmbconvert {
	private static String[] sBnum = new String[] { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
	private static String[] sUnit = new String[] { "圆", "拾", "佰", "仟", "萬", "亿", "角", "分", "整"};
	public static void main(String args[]){
		String str="";
		try{
			BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
			str=in.readLine();
		}catch(IOException e){
			System.out.println(e);
		}
		System.out.println(new rmbconvert().rmbconvertion(str));
	}
	private String rmbconvertion(String str){
		//System.out.println(str);
		String result="";
		String sHead="";
		String sTail="";
		int nSlen=str.length();
		boolean dot=false;
		/**
		 * @brief 完成去除前导的所有“0“
		 */
		int m;
		for(m=0;m<nSlen;m++){
			if(str.charAt(m)!='0'){
				if(str.charAt(m)=='.'){
					str="0"+str.substring(m);
					break;
				}else{
					str=str.substring(m);
					break;
				}
			}
		}
		if(m>=nSlen){
			str="0";
		}
		//对于包含小数部分的判断
		if(str.indexOf(".")!=-1){
			dot=true;
			sHead=str.substring(0,str.indexOf("."));
			try{
				sTail=str.substring(str.indexOf(".")+1,str.indexOf(".")+3);
			}catch(Exception e){
				try{
					sTail=str.substring(str.indexOf(".")+1,str.indexOf(".")+2);
				}catch(Exception ex){
					sTail="";
					dot=false;
				}
			}
		}else{
			dot=false;
			sHead=str;
		}
		//System.out.println("========"+str.indexOf(".")+"========="+str+"   "+sHead+"   "+sTail);
		
		nSlen=sHead.length();
		if(!sHead.equals("0")){
			for(int i=nSlen-1;i>=0;i--){
				//处理”千百十个“
				for(int k=i-(i/4)*4;k>=0;k--){
					int flag=0;
					//判断数字中间的 ”0“
					while(sHead.substring(nSlen-i-1,nSlen-i).equals("0")&&k>0){
							k--;
							i--;
							flag++;//说明”0“的个数
					}
					//对这4位的最后一位的处理
					if(k==0){
						if(!sHead.substring(nSlen-i-1,nSlen-i).equals("0")){
							if(flag>0){
								//System.out.print(sBnum[0]);
								result+=sBnum[0];
							}
							//System.out.print(choseNum(Integer.valueOf(sHead.substring(nSlen-i-1, nSlen-i))));
							result+=choseNum(Integer.valueOf(sHead.substring(nSlen-i-1, nSlen-i)));
						}
						k--;
						i--;
					}else{
						//对于这四位中有”0“,要补”零“
						if(flag>0){
							//System.out.print(sBnum[0]);
							result+=sBnum[0];
						}
						//System.out.print(choseNum(Integer.valueOf(sHead.substring(nSlen-i-1, nSlen-i))));
						result+=choseNum(Integer.valueOf(sHead.substring(nSlen-i-1, nSlen-i)));
						switch(k%4){
						case 3:
							//System.out.print(sUnit[3]);
							result+=sUnit[3];
							break;
						case 2:
							//System.out.print(sUnit[2]);
							result+=sUnit[2];
							break;
						case 1:
							//System.out.print(sUnit[1]);
							result+=sUnit[1];
							break;
						case 0:
							break;
						}
						i--;
					}
				}
				i+=1;
				if((i-4)%8==0){
					//System.out.print(sUnit[4]);
					result+=sUnit[4];
				}
				int j=i;
				if(j%8==0&&j/8>0){
					//System.out.print(sUnit[5]);
					result+=sUnit[5];
					j-=8;
				}
			}
			//System.out.println(sUnit[0]);
			result+=sUnit[0];
			result=result.replace("亿萬", "亿");
		}else if(dot==false){
			result+=sBnum[0];
			result+=sUnit[0];
		}
		if(dot==true){
			if(sTail.length()==1){
				result+=choseNum(Integer.valueOf(sTail));
				result+=sUnit[6];
			}else if(sTail.length()==2){
				boolean f=false;
				if(!sTail.startsWith("0")){
					result+=choseNum(sTail.charAt(0)-48);
					result+=sUnit[6];
				}else{
					f=true;
				}
				if(!sTail.endsWith("0")){
					if(f){
						result+=sBnum[0];
					}
					//System.out.println(choseNum(sTail.charAt(1)-48));
					result+=choseNum(sTail.charAt(1)-48);
					result+=sUnit[7];	
				}else{	
				}
			}
		}
		//System.out.println(sUnit[8]);
		result+=sUnit[8];
		return result;
	}
	private String choseNum(int num){
		if(num>=sBnum.length){
			return "";
		}
		return sBnum[num];
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -