黑马程序员技术交流社区

标题: 人民币大小写转换的一个思路,望指正 [打印本页]

作者: 常文艺    时间: 2011-12-7 18:41
标题: 人民币大小写转换的一个思路,望指正
本帖最后由 常文艺 于 2011-12-7 21:07 编辑

只说整数部分了
首先建立一个数组  中文 【】(null,十,百,千,万,十万,百万,千万,亿,十亿,百亿,千亿,万亿)
比如传入的数是 1400444009
将这个数变成一个反着取的数组数字【】(9,0,0,4,4,4,0,0,4,1)  
建立一个新数组 汉字【】 (零,一,二,三,四。。。。九  )
  建立一个新数组  转换成汉字的数字【】   将数字数组里面的元素转成汉字一一存入 得到(九,零,零,四,四,四,零,零,四,一)  
  根据 转换成汉字的数字【】 的长度 截取 中文 【】(null,十,百,千,万,十万,百万,千万,亿,十亿,百亿,千亿,万亿)
  得到 中文 【】(null,十,百,千,万,十万,百万,千万,亿,十亿);
  转换成汉字的数字【】 和 中文 【】对应位置组合 得到  中文 【】(九,零十,零百,四千,四万,四十万,零百万,零千万,四亿,一十亿)
  将第一个不含零的元素的前面的元素去掉得到新的 中文 【】 并且将所有含零元素  变成 零  得到 中文 【】
  反向这个数组中文 【】,通过定义标记只保留数组中第一次出现的“ 万“  和  “亿“。  变成字符串 将连续出现的零变成一个
  结束     可以把各个步骤进行封装。
  
作者: 侯伟浩    时间: 2011-12-7 20:08
首先中文[]为{元,十,百,千,万,十,百,千,亿,十,百,千,万},这样才对;先在String中的0下标处插入中文【i】,接着插入汉字【传入数字%10】;
作者: 段波    时间: 2011-12-7 20:33
private static final char[] data = new char[]{
                        '零','壹','贰','叁','肆','伍','陆','柒','捌','玖'
                };
        private static final char[] units = new char[]{
                '元','拾','佰','仟','万','拾','佰','仟','亿'
        };
        public static void main(String[] args) {
                System.out.println(
                                convert(135689123));
        }

        public static String convert(int money)
        {
                StringBuffer sbf = new StringBuffer();
                int unit = 0;
                int k=0;
                while(money!=0)
                {
                        sbf.append(units[unit++]);
                        int number = money%10;
                    sbf.append(data[number]);
                        money /= 10;
               
                }
        sbf.reverse();
                return sbf.toString();
        }

给你个代码吧!其实就是取整取余的过程
作者: 常文艺    时间: 2011-12-7 20:52
段波 发表于 2011-12-7 20:33
private static final char[] data = new char[]{
                        '零','壹','贰','叁','肆','伍','陆','柒','捌','玖'
...

这个思路好 呵呵
作者: 常文艺    时间: 2011-12-7 20:55
段波 发表于 2011-12-7 20:33
private static final char[] data = new char[]{
                        '零','壹','贰','叁','肆','伍','陆','柒','捌','玖'
...

不过还是要解决尾数为零 和  中间多个零的问题
作者: 侯伟浩    时间: 2011-12-9 09:18
给你个去除不必要的重复的方法吧:
  1. //用合适的字符串代替不合规范的字符串
  2.                 public  String replace(String str)
  3.                 {
  4.                          while(str.indexOf("零億")!= -1 ||str.indexOf("零万")!= -1 ||str.indexOf("零仟")!= -1
  5.                                             ||str.indexOf("零佰")!= -1 ||str.indexOf("零拾")!= -1
  6.                                             ||str.indexOf("零圆")!= -1 )
  7.                          {
  8.                                             str = str.replace("零億", "億");
  9.                                             str = str.replace("零万", "万");
  10.                                             str = str.replace("零仟", "零");
  11.                                             str = str.replace("零佰", "零");
  12.                                             str = str.replace("零拾", "零");
  13.                                             if(str.startsWith("零圆"))
  14.                                                     str = str.replace("零圆", "");
  15.                                             else str = str.replace("零圆", "圆");
  16.                          }
  17.                          if(str.indexOf("億万") != -1){
  18.                                     str = str.replace("億万", "億零");
  19.                                     }
  20.                                     if(str.indexOf("万仟") != -1){
  21.                                     str = str.replace("万仟", "万零");
  22.                                     }
  23.                                   String req = ".*佰億.仟.*";
  24.                                     if(str.matches(req)){
  25.                                     str = str.replace(str.substring(str.indexOf("佰億")+2,str.indexOf("仟")), "零"+str.substring(str.indexOf("佰億")+2,str.indexOf("仟")));
  26.                                     }
  27.                                     req = ".*拾億.仟.*";
  28.                                     if(str.matches(req)){
  29.                                     str = str.replace(str.substring(str.indexOf("拾億")+2,str.indexOf("仟")), "零"+str.substring(str.indexOf("拾億")+2,str.indexOf("仟")));
  30.                                     }
  31.                                     req = ".*佰万.仟.*";
  32.                                     if(str.matches(req)){
  33.                                     str = str.replace(str.substring(str.indexOf("佰万")+2,str.indexOf("仟")), "零"+str.substring(str.indexOf("佰万")+2,str.indexOf("仟")));
  34.                                     }
  35.                                     req = ".*拾万.仟.*";
  36.                                     if(str.matches(req)){
  37.                                     str = str.replace(str.substring(str.indexOf("拾万")+2,str.indexOf("仟")), "零"+str.substring(str.indexOf("拾万")+2,str.indexOf("仟")));
  38.                                     }
  39.                                     for(int i=0;i<str.length();i++)
  40.                                     {
  41.                                      if(str.indexOf("零零") != -1)
  42.                                      {
  43.                                             str = str.replace("零零", "零");
  44.                                      }
  45.                                     }
  46.                                    if(str.length()==1)
  47.                                    {
  48.                                            str="零圆整";
  49.                                    }
  50.                         return str;
  51.                 }
  52.         }
复制代码

作者: 周敏2011nc    时间: 2011-12-21 15:05
public class MoneyToChinese {

        private static final char[] data = new char[] { '零', '壹', '贰', '叁', '肆',
                        '伍', '陆', '柒', '捌', '玖' };
        private static final char[] units = new char[] { '元', '拾', '佰', '仟', '万',
                        '拾', '佰', '仟', '亿' };

        public static void main(String[] args) {
                System.out.println(convertMoney(90101010));
        }
        public static String convertMoney(int money) {
                StringBuffer sbf = new StringBuffer();
                int unit = 0;
                while (money != 0) {
                        sbf.insert(0, units[unit++]);
                        int number = money % 10;
                        sbf.insert(0, data[number]);
                        money /= 10;
                }
                //System.out.println(sbf.toString());
                return sbf.toString().replaceAll("零[拾佰仟]","零").replaceAll("零+万","万").replaceAll("零+元","元").replaceAll("零+","零")+"整";
        }
}

作者: 陈帅雷    时间: 2011-12-22 13:13
public String chinese_Capital(String num) {
String s = "";
String[] a = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
String[] b = { "元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰",
"仟", "万", "拾", "佰", "仟"};//16位
int length = num.length();
int zeroCount = 0;
//for循环实现了连续的零只取一个,并且个,万,亿位如果为零只取单位不取零
for (int i = 0; i < length; i++) {

if(num.charAt(i) - 48 == 0) {
zeroCount ++;
if(length - i - 1 == 4 || length - i - 1 == 8 || length - i - 1 ==0) {
s += b[length - i - 1];
} else  if(zeroCount == 1){
s += a[num.charAt(i) - 48];

}

} else {
zeroCount = 0;
s += (a[num.charAt(i) - 48] + b[length - i - 1]);
}
}
s = s.replaceAll("零元", "元");
s = s.replaceAll("零亿", "亿");
s = s.replaceAll("零万", "万");
s = s.replaceAll("亿万", "亿");
return s;
}

我的一个实现函数,整数部分的。
作者: 刘博    时间: 2011-12-22 13:18
段波 发表于 2011-12-7 20:33
private static final char[] data = new char[]{
                        '零','壹','贰','叁','肆','伍','陆','柒','捌','玖'
...

这个厉害:loveliness:
作者: 于冰    时间: 2011-12-22 13:40
周敏2011nc 发表于 2011-12-21 15:05
public class MoneyToChinese {

        private static final char[] data = new char[] { '零', '壹', '贰', ' ...

数组元素定义是用“零”
作者: 于冰    时间: 2011-12-22 13:44
涉及到小数部分,就把该数字定义成浮点的,强制类型转换为long 此时转换后的就是整数部分,原数减整数部分得出小数部分。





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