黑马程序员技术交流社区

标题: 分享一道入学测试题 金额转换 [打印本页]

作者: xplcc    时间: 2014-11-2 20:10
标题: 分享一道入学测试题 金额转换
本帖最后由 xplcc 于 2014-11-2 20:14 编辑
  1. /**
  2. * 10、  金额转换,阿拉伯数字转换成中国传统形式。
  3.                       例如:101000001010   转换为   壹仟零壹拾亿零壹仟零壹拾圆整
  4. * @author Administrator         
  5. *
  6. */
  7. public class Test10 {

  8.         public static void main(String[] args) {
  9.                 //方法中的参数为double型
  10.                 System.out.println(show(101000001010D));
  11.         }                                
  12.         /**
  13.          *
  14.          * @param num 整数部分
  15.          * @param decimal 小数部分
  16.          * @return
  17.          */
  18.         public static String converse(long num, int decimal){
  19.                
  20.                 //大写数字数组
  21.                 String[] upperArr = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
  22.                 //整数部分的单位数组
  23.                 String[] unitArr = {"圆","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟","万"};
  24.                
  25.                 //处理整数部分
  26.                 //转换成大写后的字符串
  27.                 String str = "";
  28.                 //记录0的重复次数
  29.                 int count = 0;
  30.                 //数字的位数 从0开始 例如:0表示个位数 1表示十位数
  31.                 int index = 0;
  32.                 while(num>0){
  33.                         //处理不是零的情况
  34.                         if(num%10!=0){
  35.                                 str = upperArr[(int)(num%10)] + unitArr[index] + str;
  36.                                 //清零 重新记录0的重复次数
  37.                                 count = 0;
  38.                         //处理是零的情况
  39.                         }else{
  40.                                 //记录0的重复次数
  41.                                 count++;
  42.                                 //若个位数为0 则添加单位”圆“
  43.                                 if(index==0){
  44.                                         str = unitArr[0];
  45.                                 }
  46.                                 //只对第一次是0的情况进行处理 对再次出现的0不作处理 ;并且不对个位数上出现的0做处理
  47.                                 if(count==1 && index>0){
  48.                                         str = upperArr[0] + str;
  49.                                 }
  50.                                 //当万的4个位数不是0时,添加单位"万"
  51.                                 if(index==4 && num%10000!=0)str = unitArr[4] + str;
  52.                                 //当亿的5个位数不是0时,添加单位"亿"
  53.                                 if(index==8 && num%100000!=0)str = unitArr[8] + str;
  54.                         }
  55.                         index++;
  56.                         //去掉已转换的数字
  57.                         num = (long)Math.floor(num/10.0);
  58.                        
  59.                 }
  60.                 //若小数部分为0 直接返回
  61.                 if(decimal==0)
  62.                         return  str + "整";
  63.                 //处理小数部分
  64.                 String str2 = "";
  65.             str2 = upperArr[(int)(decimal/10%10)] + "角"
  66.                        + upperArr[(int)(decimal%10)] + "分";
  67.                 return str + str2;
  68.         }
  69.         /**
  70.          * 将double数据拆成整数和小数部分 然后调用大小写转换方法
  71.          * @param d
  72.          * @return
  73.          */
  74.         public static String show(double d){
  75.                
  76.                 long num = (long)Math.floor(d);
  77.                 int decimal = (int)(d*100-num*100);
  78.                 return converse(num,decimal);
  79.         }
  80. }
复制代码


作者: 齐宁宁    时间: 2014-11-2 20:13
谢谢分享
作者: OnlyStyle    时间: 2014-11-2 20:39
谢谢分享,楼主好人。




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