程序如下:
1 import java.lang.StringBuffer; 2 /** 3 给定一个浮点数,将其装换成人民币大写的读法 4 88.5:捌十捌元零伍角 5 */ 6 public class Num2Rmb 7 { 8 private String[] hanArr={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"}; 9 10 //将一个浮点数分解成整数部分和小数部分,小数部分保留两位小数 11 private String[] divide(double num) 12 { 13 long zheng=(long)num; 14 long xiao=Math.round((num-zheng)*100); 15 return new String[]{zheng+"",String.valueOf(xiao)}; 16 } 17 18 19 private String toHanStr(String numStr) 20 { 21 String str=""; 22 //先转换正数 23 int numLen=numStr.length(); 24 if(numLen>9) 25 { 26 System.out.println("输入的浮点数的正数部分的长度不能超过9,最大为9."); 27 return ""; 28 } 29 for(int i=0;i<numLen;i++) 30 { 31 int number= numStr.charAt(i)-48; 32 str+=hanArr[number]; 33 } 34 //给正数部分添加单位 35 /** 36 1 2 3 4 5 6 7 8 9 37 1亿2千3百4十5万6千7百8十9 38 */ 39 String[] unit=new String[]{"亿","千","百","十","万"}; 40 String newStr=""; 41 switch(numLen) 42 { 43 case 9: 44 for(int i=0;i<numLen;i++) 45 { 46 //取字符 47 char ch=str.charAt(i); 48 if(i==0) 49 newStr+=ch+unit[0]; 50 if(i==1) 51 newStr+=ch+unit[1]; 52 if(i==2) 53 newStr+=ch+unit[2]; 54 if(i==3) 55 newStr+=ch+unit[3]; 56 if(i==4) 57 newStr+=ch+unit[4]; 58 if(i==5) 59 newStr+=ch+unit[1]; 60 if(i==6) 61 newStr+=ch+unit[2]; 62 if(i==7) 63 newStr+=ch+unit[3]; 64 if(i==8) 65 newStr+=ch; 66 } 67 break; 68 case 8://12345678 69 for(int i=0;i<numLen;i++) 70 { 71 //取字符 72 char ch=str.charAt(i); 73 if(i==0) 74 newStr+=ch+unit[1]; 75 if(i==1) 76 newStr+=ch+unit[2]; 77 if(i==2) 78 newStr+=ch+unit[3]; 79 if(i==3) 80 newStr+=ch+unit[4]; 81 if(i==4) 82 newStr+=ch+unit[1]; 83 if(i==5) 84 newStr+=ch+unit[2]; 85 if(i==6) 86 newStr+=ch+unit[4]; 87 if(i==7) 88 newStr+=ch; 89 } 90 break; 91 case 7://1234567 92 for(int i=0;i<numLen;i++) 93 { 94 //取字符 95 char ch=str.charAt(i); 96 if(i==0) 97 newStr+=ch+unit[2]; 98 if(i==1) 99 newStr+=ch+unit[3]; 100 if(i==2) 101 newStr+=ch+unit[4]; 102 if(i==3) 103 newStr+=ch+unit[1]; 104 if(i==4) 105 newStr+=ch+unit[2]; 106 if(i==5) 107 newStr+=ch+unit[3]; 108 if(i==6) 109 newStr+=ch; 110 } 111 break; 112 case 6://123456 113 for(int i=0;i<numLen;i++) 114 { 115 //取字符 116 char ch=str.charAt(i); 117 if(i==0) 118 newStr+=ch+unit[3]; 119 if(i==1) 120 newStr+=ch+unit[4]; 121 if(i==2) 122 newStr+=ch+unit[1]; 123 if(i==3) 124 newStr+=ch+unit[2]; 125 if(i==4) 126 newStr+=ch+unit[4]; 127 if(i==5) 128 newStr+=ch; 129 } 130 break; 131 case 5://12345 132 for(int i=0;i<numLen;i++) 133 { 134 //取字符 135 char ch=str.charAt(i); 136 if(i==0) 137 newStr+=ch+unit[4]; 138 if(i==1) 139 newStr+=ch+unit[1]; 140 if(i==2) 141 newStr+=ch+unit[2]; 142 if(i==3) 143 newStr+=ch+unit[3]; 144 if(i==4) 145 newStr+=ch; 146 } 147 break; 148 case 4://1234 149 for(int i=0;i<numLen;i++) 150 { 151 //取字符 152 char ch=str.charAt(i); 153 if(i==0) 154 newStr+=ch+unit[1]; 155 if(i==1) 156 newStr+=ch+unit[2]; 157 if(i==2) 158 newStr+=ch+unit[3]; 159 if(i==3) 160 newStr+=ch; 161 } 162 break; 163 case 3://123 164 for(int i=0;i<numLen;i++) 165 { 166 //取字符 167 char ch=str.charAt(i); 168 if(i==0) 169 newStr+=ch+unit[2]; 170 if(i==1) 171 newStr+=ch+unit[3]; 172 if(i==2) 173 newStr+=ch; 174 } 175 break; 176 case 2://12 177 for(int i=0;i<numLen;i++) 178 { 179 //取字符 180 char ch=str.charAt(i); 181 if(i==0) 182 newStr+=ch+unit[3]; 183 if(i==1) 184 newStr+=ch; 185 } 186 break; 187 case 1: 188 newStr+=str; 189 break; 190 default: 191 break; 192 } 193 newStr+="元"; 194 String endStr=""; 195 StringBuffer sb=new StringBuffer(newStr); 196 //处理转换后的字符串里面多个零的情况,寄将零后面的单位去掉 197 for(int j=0;j<newStr.length();j++) 198 { 199 char ch=newStr.charAt(j); 200 if(ch=='零') 201 { 202 sb.replace(j+1,j+2,"*"); 203 } 204 205 } 206 //if(index>0)// 207 endStr=sb.toString().replace("*",""); 208 209 StringBuffer sb0=new StringBuffer(endStr); 210 int dou=sb0.toString().indexOf("零零"); 211 if(dou>0) 212 { 213 sb0.replace(dou,dou+1,""); 214 } 215 return sb0.toString(); 216 217 } 218 219 public static void main(String[] args) 220 { 221 StringBuffer sb=new StringBuffer("abbcdf"); 222 int index0=sb.toString().indexOf("bb"); 223 System.out.println(index0); 224 sb.replace(index0,index0+2,"m"); 225 System.out.println(sb.toString()); 226 String s="abcd"; 227 int index=s.indexOf("f"); 228 System.out.println(index); 229 Num2Rmb nr=new Num2Rmb(); 230 String[] numStr= nr.divide(100345678.25); 231 String str= nr.toHanStr(numStr[0]); 232 System.out.println(str); 233 } 234 }
运行效果如下: