黑马程序员技术交流社区

标题: 入学测试题之金额转换 [打印本页]

作者: Huberry    时间: 2014-10-6 11:20
标题: 入学测试题之金额转换
  1. package com.itheima;

  2. /*
  3. * 题目:  金额转换,阿拉伯数字转换成中国传统形式。
  4. *  例如:101000001010   转换为   壹仟零壹拾亿零壹仟零壹拾圆整
  5. *  
  6. *  思路:
  7. *  1、定义一个方法,接收一个double类型参数,即要转换的数字
  8. *  2、定义两个字符数组,分别存储数字对应的汉字 和 每一位数字所对应的单位的汉字
  9. *  3、把要转换的数字转换成字符串,并对小数部分和整数部分单独操作
  10. *  4、若小数部分不为零,就把小数部分数字转换成对应的汉字,并在分别在后面加上‘角’和‘分’
  11. *  5、对于整数部分,逐次对每一位的数字进行操作,转换成汉字并在每一位后面加上对应的单位
  12. *  6、简单的转换完成后,对得到的字符串进行特殊情况的操作,如:“零佰”、“零仟”这些组合要替换掉,可以通过正则表达式来实现
  13. */

  14. public class Test10 {

  15.         public static void main(String[] args) {
  16.                
  17.                 double d = 100000000000000.00;
  18.                
  19.                 System.out.println(d+":\r\n"+toChinese(d));
  20.         }
  21.        
  22.         public static String toChinese(double value){
  23.                 //把数字对应的汉字封装成一个char数组
  24.                 char[] numVal ={'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
  25.                 //把每一位数对应的单位封装成一个数组,
  26.                 char[] unit =  {'圆','拾','佰','仟','万','拾','佰','仟','亿','拾','佰','仟','万','拾','佰'};  
  27.                
  28.                 String longStrVal = ""; //定义一个字符串用来表示整数部分转换后的值
  29.                 String decStrVal = "";  //表示小数部分转换后的值
  30.                
  31.                 if(value>100000000000000.00){  //判断这个值是否超出范围,此处是选的一个比较接近的值,具体数值还没研究出来
  32.                                 System.out.println("数值过大,会损失精度....");
  33.                 }else{                                            //没有超出范围则继续操作
  34.                        
  35.                         long bignum = (long)(value*100); //把要操作的数转换成整数
  36.                         String bigStr = String.valueOf(bignum);//变成字符串
  37.                         String longStr = bigStr.substring(0, bigStr.length()-2); //取得整数部分所表示的字符串       
  38.                         String decStr = bigStr.substring(bigStr.length()-2);        //小数部分所表示字符串
  39.                        
  40.                         //对小数部分进行处理
  41.                         if(decStr.equals("00")){
  42.                                 decStrVal="整";
  43.                         }else{
  44.                                 //把数字转换成汉字,并在对应位上加上‘角’和‘分’
  45.                                 decStrVal=numVal[decStr.charAt(0)-'0']+"角"+numVal[decStr.charAt(1)-'0']+"分";
  46.                         }
  47.                        
  48.                         //对整数部分进行处理
  49.                         for(int i=0; i<longStr.length(); i++){
  50.                                 //对每一位数字都进行转换,并在每一位后面加上对应的单位
  51.                                 longStrVal =longStrVal+numVal[longStr.charAt(i)-'0']+unit[longStr.length()-i-1];
  52.                         }
  53.                        
  54.                         //对特殊组合进行排除
  55.                         longStrVal = longStrVal.replaceAll("零[拾佰仟]", "零"); //“零拾”、“零佰”、“零仟”替换成“零”
  56.                         longStrVal = longStrVal.replaceAll("零+", "零");                //上条语句执行完后会出现多个“零”,把多个“零”变成一个“零”
  57.                         longStrVal = longStrVal.replaceAll("零([圆万亿])", "$1");//“零远”、“零万”、“零亿”替换成“圆”、“万”、“亿”
  58.                         longStrVal = longStrVal.replaceAll("亿万", "亿");        //若亿和万之间全是零,则把万去掉
  59.                 }
  60.                 return longStrVal+decStrVal; //最后把整数部分和小数部分相加即转换完成
  61.         }

  62. }
复制代码







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