A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 遇见未来2016 中级黑马   /  2016-5-27 12:31  /  611 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

金额转换,阿拉伯数字转换成中国传统形式。例如:101000001010 转换为壹仟零壹拾亿零壹仟零壹拾圆整

2 个回复

倒序浏览
有人知道吗。。。。。。。
回复 使用道具 举报
  1. public static void main(String[] args) {
  2.                 System.out.println(changeToCN(101000001010D));

  3.         }
  4.         public static String changeToCN(double money){
  5.                 //大写数字
  6.                 String[] big = new String[]{"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
  7.                 //段位内的单位
  8.                 String[] unit = new String[]{"","拾","佰","仟"};
  9.                 //段位单位
  10.                 String[] un = new String[]{"","萬","亿"};
  11.                 //只取2位小数
  12.                 String value = String.valueOf((long)(money*100));
  13.                 //整数部分
  14.                 String iValue = value.substring(0, value.length()-2);
  15.                 //小数部分
  16.                 String dValue = value.substring(value.length()-2);
  17.                
  18.                 //构造小数部分的大写数字
  19.                 String dValueSb = "";
  20.                 //如果两位小数都是0
  21.                 if(dValue.equals("00")){
  22.                         //添加“整”字
  23.                         dValueSb +="整";
  24.                 //如果小数点后1位是零
  25.                 }else if(dValue.charAt(0)=='0'){
  26.                         //添加格式为:零 "几" 分                 
  27.                         dValueSb +=big[0]+big[dValue.charAt(1)-'0']+"分";
  28.                 }else{
  29.                         //如果小数点后2位都不是零,添加格式为:"几"角 "几"分
  30.                         dValueSb +=big[dValue.charAt(0)-'0']+"角"+big[dValue.charAt(1)-'0']+"分";
  31.                 }
  32.                
  33.                 //构造整数部分的大写数字
  34.                 String iValueSb = "";
  35.                 //将整数部分拆散
  36.                 char[] iChar = iValue.toCharArray();
  37.                 // 标志当前位的上一位是否为有效0位(如万位的0对千位无效)
  38.                 boolean preZero = false;
  39.                 // 连续出现0的次数
  40.                 byte zeroTimes = 0;
  41.                 //对每位数进行操作
  42.                 for(int i=0;i<iChar.length;i++){
  43.                         //段位,4位数为一个段位,0段位表示万以下,1段位表示万,2段位表示亿
  44.                         int dex = (iChar.length-i-1)/4;
  45.                         //段位内的位置,0代表个,1代表十,2代表百,3代表千
  46.                         int index = (iChar.length-i-1)%4;
  47.                         //如果当前位置的数是0
  48.                         if(iChar[i]=='0'){
  49.                                 //记录前位是0
  50.                                 preZero = true;
  51.                                 //连续出现的0增加1
  52.                                 zeroTimes++;
  53.                                 //段位内个位数是0,只要段位内4位数不全是0,则添加段位单位:万、亿
  54.                                 if(index==0&&zeroTimes<4){
  55.                                         iValueSb +=un[dex];
  56.                                         // 不管上一位是否为0,置为无效0位
  57.                                         preZero = false;
  58.                                 }
  59.                                
  60.                         }else{
  61.                                 zeroTimes = 0;
  62.                                 // 当出现不是零的数,首先查看上一位是否为有效0位
  63.                                 if (preZero) {
  64.                                         // 添加零,并且只会在此处添加一次零,不会出现重复零
  65.                                         iValueSb += big[0];
  66.                                         //复位
  67.                                         preZero = false;
  68.                                 }
  69.                                 //添加该数字的大写
  70.                                 iValueSb += big[iChar[i]-'0'];
  71.                                 //如果是段位内的个位,添加段位单位:万、亿
  72.                                 if(index==0){
  73.                                         iValueSb +=un[dex];
  74.                                 //如果不是,添加段位内单位:十、百、千
  75.                                 }else{
  76.                                         iValueSb += unit[index];
  77.                                 }
  78.                         }
  79.                 }

  80.                 // 如果整数部分存在,则有圆的字样
  81.                 if (iValueSb.length() > 0)
  82.                         iValueSb += '圆';
  83.                
  84.                 // 返回拼接起来的值
  85.                 return iValueSb + dValueSb;
  86.         }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马