/*分析:
输入一个double数值。自带两位小数的。数值小于10^13。
把这个数值字符串切割成整数部分和小数部分。
小数部分判断几角几分,或者为零时输出“整”。
整数部分每后四位分成一个子字符串,然后对每个子字符串的读法进行判断。
如果超过一万,就分割成一万以上和一万以下的部分,分开读,一万以上的在读法上加“万”。
连起来就是整个RMB的读法。
*/
- class Demo
- {
- private static String [] shu={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖","拾","整"};
- private static String [] wei={"元","拾","佰","仟","万","亿","角","分"}; //数字只到亿单位。
- public static void main(String [] args)
- {
- double rmb=1234567.89; //输入的数要保证只有两位小数。
- String s=transform(rmb);
- System.out.println(s);
- }
- public static String transform(double d)
- {
- String rmb=Double.toString(d); //转成字符串。
- int i=rmb.indexOf('.');
- String xiao=rmb.substring(i+1); //取小数部分。
- String zheng=rmb.substring(0,i); //取整数部分。
- String s1=readZ(zheng);
- String s2=readX(xiao);
- System.out.println(xiao);
- return s1+s2;
- }
- private static String read(String s) //这里传入的数最多是4位数。
- {
- int n=Integer.parseInt(s);
- int ge,shi,bai,qian;
-
-
- String read="";
- if ((qian=n/1000%10)!=0)
- read=shu[qian]+wei[3];
- if ((bai=n/100%10)!=0)
- read+=shu[bai]+wei[2];
- if ((shi=n/10%10)!=0)
- read+=shu[shi]+wei[1];
- if ((ge=n%10)!=0)
- read+=shu[ge];
-
- return read;
- }
- private static String readZ(String zheng)
- {
- String read="";
- int L=zheng.length();
- if (L<=4)
- read=read(zheng)+wei[0];
- else if (L<=8)
- {
- String s1=zheng.substring(0,L-4);
- String s2=zheng.substring(L-4);
- read=read(s1)+wei[4]+read(s2)+wei[0];
- }
- else if (L<=12)
- {
- String s1=zheng.substring(0,L-8);
- String s2=zheng.substring(L-8,L-4);
- String s3=zheng.substring(L-4);
- read=read(s1)+wei[5]+read(s2)+wei[4]+read(s3)+wei[0];
- }
- else
- {
- return "【数值太大!】";
- }
- return read;
- }
- private static String readX(String xiao)
- {
- int n=Integer.parseInt(xiao);
- String str="";
- if(n==0)
- return shu[11]; //返回"整"。
- else
- {
- if (n/10!=0)
- str+=shu[n/10]+wei[6]; //返回 Y 角。
- if (n%10!=0)
- str+=shu[n%10]+wei[7]; //返回 Y 分。
- }
- return str;
- }
- }
复制代码 有不精简的或者错误的地方请多多指正。
|
|