📄 rmbconvert.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 + -