黑马程序员技术交流社区

标题: 将一个浮点数转换成人民币读法字符串。 [打印本页]

作者: 1017161726    时间: 2015-5-1 17:37
标题: 将一个浮点数转换成人民币读法字符串。
/*分析:
         输入一个double数值。自带两位小数的。数值小于10^13。
         把这个数值字符串切割成整数部分和小数部分。
         小数部分判断几角几分,或者为零时输出“整”。
         整数部分每后四位分成一个子字符串,然后对每个子字符串的读法进行判断。
                     如果超过一万,就分割成一万以上和一万以下的部分,分开读,一万以上的在读法上加“万”。
         连起来就是整个RMB的读法。
*/

  1. class Demo
  2. {
  3.         private static String [] shu={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖","拾","整"};
  4.     private static String [] wei={"元","拾","佰","仟","万","亿","角","分"};                //数字只到亿单位。

  5.         public static void main(String [] args)
  6.         {
  7.                 double rmb=1234567.89;                                                                //输入的数要保证只有两位小数。
  8.                 String s=transform(rmb);
  9.                 System.out.println(s);
  10.         }

  11.         public static String transform(double d)
  12.         {
  13.                 String rmb=Double.toString(d);                                        //转成字符串。
  14.                 int i=rmb.indexOf('.');
  15.                 String xiao=rmb.substring(i+1);                                                        //取小数部分。
  16.                 String zheng=rmb.substring(0,i);                                                        //取整数部分。
  17.                 String s1=readZ(zheng);
  18.                 String s2=readX(xiao);
  19.                 System.out.println(xiao);
  20.                 return s1+s2;
  21.         }

  22.         private static String read(String s)                                        //这里传入的数最多是4位数。
  23.         {
  24.                 int n=Integer.parseInt(s);
  25.                 int ge,shi,bai,qian;
  26.                
  27.        
  28.                 String read="";

  29.                 if ((qian=n/1000%10)!=0)
  30.                         read=shu[qian]+wei[3];
  31.                 if ((bai=n/100%10)!=0)
  32.                         read+=shu[bai]+wei[2];
  33.                 if ((shi=n/10%10)!=0)
  34.                         read+=shu[shi]+wei[1];
  35.                 if ((ge=n%10)!=0)
  36.                         read+=shu[ge];
  37.                
  38.                 return read;
  39.         }

  40.         private static String readZ(String zheng)
  41.         {
  42.                 String read="";
  43.                 int L=zheng.length();
  44.                 if (L<=4)
  45.                         read=read(zheng)+wei[0];
  46.                 else if (L<=8)
  47.                 {
  48.                         String s1=zheng.substring(0,L-4);
  49.                         String s2=zheng.substring(L-4);
  50.                         read=read(s1)+wei[4]+read(s2)+wei[0];
  51.                 }
  52.                 else if (L<=12)
  53.                 {
  54.                         String s1=zheng.substring(0,L-8);
  55.                         String s2=zheng.substring(L-8,L-4);
  56.                         String s3=zheng.substring(L-4);
  57.                         read=read(s1)+wei[5]+read(s2)+wei[4]+read(s3)+wei[0];
  58.                 }
  59.                 else
  60.                 {
  61.                         return "【数值太大!】";
  62.                 }
  63.                 return read;
  64.         }

  65.         private static String readX(String xiao)
  66.         {
  67.                 int n=Integer.parseInt(xiao);
  68.                 String str="";
  69.                 if(n==0)
  70.                         return shu[11];                                                                //返回"整"。
  71.                 else
  72.                 {
  73.                         if (n/10!=0)
  74.                                 str+=shu[n/10]+wei[6];                //返回 Y 角。
  75.                         if (n%10!=0)
  76.                                 str+=shu[n%10]+wei[7];                //返回 Y 分。
  77.                 }
  78.                 return str;
  79.         }
  80. }
复制代码
有不精简的或者错误的地方请多多指正。







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2