要求:输入阿拉伯数字的金额,显示为中文大写形式,如 105.00→一百零五元零角零分

解决方案 »

  1.   

    这个,很复杂的,我有JS的代码
    <script language="javaScript">
    function convert(str){
    if(str==""){
    alert("请输入金额!");form1.money.focus();return;
    }
    if(isNaN(str)){
    alert("您输入的金额不合法!");return;
    }
    if(str>999999999999){
    alert("您输入的金额不能大于999999999999!");return;
    }
    //将小数点后保留两位小数
    /*
    if(str.indexOf(".")>0){
    var decimal=str.length-str.indexOf(".")-1;
    if(decimal>2){
    str=str.substr(0,str.length+2-decimal);
    }
    }*/
    value=change(str); //调用自定义函数转换
    form1.moneyok.value=value;  //将转换后的值赋给"转换后的大写金额"文本框
    }
    function change(str){
    je="零壹贰叁肆伍陆柒捌玖";
    cdw="万仟佰拾亿仟佰拾万仟佰拾元角分";
    var newstring=(parseInt(str*100)).toString();
    newstringlog=newstring.length;
    newdw=cdw.substr(cdw.length-newstringlog);
    num0=0;     //记录零的个数
    wan=0;     //记录万位出现的次数
    dxje="";     //记录大写金额
    for(m=1;m<newstringlog+1;m++){
    xzf=newstring.substr(m-1,1);    //取得该位数
    dzf=je.substr(xzf,1); //结果(大写的零-玖)
    dw=newdw.substr(m-1,1); //位大写
    if(dzf=="零"){
    dzf="";
    if(dw=="亿"){
    }else if(dw=="万"){
    dzf="";
    wan=1; 
    }else if(dw=="元"){ }else{
    dw=""; //记录单位
    }
    num0=num0+1;
    }else{
    if(num0-wan>0){
    if(dw!="角"){
    dzf="零"+dzf;
    }
    }
    num0=0;
    }
    dxje=dxje+dzf+dw;
    }
    if(newstring.length!=1){
    if(newstring.substr(newstring.length-2)=="00"){
    dxje=dxje+"整";
    }else{
    dxje=dxje;
    }
    }
    return dxje;


    </script>
      

  2.   

    是要用Java写吗?这个似乎很简单吧。我们大一时计算机基础课时,用VFP就做了这个题的。
    就是用数组分拆,转换就OK了。貌似就是一楼那样,用什么语言实现都可以。
      

  3.   

    new HashMap();
    把1--9放到HashMap里。
    循环截取 输入的字符,从0位开始到最后。
    然后把 值从map里匹配出来。
    然后循环拼成中文串就好了。
    我还是建议楼主,自己能思考思考,方法有很多。
    我这个就当做抛砖引玉了。
      

  4.   

    一般这种问题都是 小商店的购物系统用 所以只要求小数点后两位
    1)将105.00(****.**)乘以100 
    2)强制转换成整型
    3)求余10 取到最低位,用变量保存(如:存到X中)
    4)除以10,去掉最低位 做成循环 直到除尽
    5)创建一个输出汉字的类
       用switch(X)来做
      

  5.   

    差不多这个样子的,3位数,只写了整数部分,没解决0的话省略“十”的问题,反正差不多这个意思啦。class  Alpha2Chinese
    {   
        public char Number2Chn(int SingleNumber){
    char Chn;
       switch (SingleNumber)
       {
       case 1: Chn='一';break;
       case 2: Chn='二';break;
       case 3: Chn='三';break;
       case 4: Chn='四';break;
       case 5: Chn='五';break;
       case 6: Chn='六';break;
       case 7: Chn='七';break;
       case 8: Chn='八';break;
           case 9: Chn='九';break;
       case 0: Chn='零';break;
       default: Chn='错';break;
       }
       return Chn;
    } public void ScreenOut(int InputNumber){
    System.out.println(Number2Chn(InputNumber/100)+"十");
       if (InputNumber>999)
       {
       System.out.println("Sorry, your input is unlegal");
       }
       else if (InputNumber>99)
       {
       System.out.println(Number2Chn(InputNumber/100)+"百"
       +Number2Chn((InputNumber%100)/10)+"十"
       +Number2Chn(InputNumber%10));
       }
       else if (InputNumber>9)
       {
       System.out.println(Number2Chn((InputNumber%100)/10)+"十"
       +Number2Chn(InputNumber%10));
       }
       else 
       {
       System.out.println(Number2Chn(InputNumber));
       }
    } public static void main(String[] args) 
    {
    Alpha2Chinese AC = new Alpha2Chinese(); 
    AC.ScreenOut(108);
    }
    }
      

  6.   

    这段代码public class numToChRMB {
        private static final String chs[] = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖", "拾" };
        /** *//**
         * 
         * @param money 金额数字串
         * @return 金额中文大写
         * 将输入数字串money分割成4位数,将四位数转换成金额大写后再加上单位("","万","亿")
         */
        public static String numToRMB(String money) {
            StringBuilder chRMB = new StringBuilder();
            money=money.replaceAll("[,,]", "");//去除分隔符逗号
            
            try {
                double t = Double.parseDouble(money);
                if (t < 0)  {
                    System.out.println("金额不能是负的!");
                    throw new IllegalArgumentException("金额不能是负的!");
                    //return null;
                }
            } catch (NumberFormatException e)  {
                System.out.println("输入数据有误,请检查!");
                throw new IllegalArgumentException("输入数据有误,请检查!");
                //return null;
            }
            int dotPos = money.indexOf('.');
            String strz;//截取整数部分
            if(dotPos==-1) {
                strz=money;
            }
            else {
                strz=money.substring(0, dotPos);//整数部分
            }
            StringBuilder sb=new StringBuilder(strz);
            while(sb.length()>=1&&sb.charAt(0)=='0') {// 去掉数前面多余的零
                sb.deleteCharAt(0);
            }
            if(sb.length()==0) {//输入为‘0 0’的情况
                return "零";
            }
            strz=sb.toString();
            String cur="";
            boolean zero=false;//记录是否应该加‘零’如 1,0000,0000,0001,读作 壹万亿零壹圆整
            String temp;
            String digits;//每次截取的最后四位数
            while(strz.length()>0) {
                
                if(strz.length()>=4) {
                    digits=strz.substring(strz.length()-4);
                    strz=strz.substring(0, strz.length()-4);
                }
                else {
                    digits=strz;
                    strz="";
                }
                    temp=fourMaxChange(digits);
                    if(temp.equals("零")) {
                        if(cur.equals("亿")) {
                            chRMB.insert(0, "亿");
                        }
                        if (zero == true)  {
                            if (!chRMB.substring(0, 1).equals("零"))
                                chRMB.insert(0, "零");
                            zero = false;
                        }
                    }
                    else  {
                    temp += cur;
                    chRMB.insert(0, temp);
                    if (digits.charAt(0) == '0')
                        if (chRMB.length() >=1
                                && !chRMB.substring(0, 1).equals("零"))
                            chRMB.insert(0, "零");
                    zero = true;
                }
                    if(cur.equals("")) {//改变单位
                        cur="万";
                    }
                    else if(cur.equals("亿")) {
                        cur="万";
                    }
                    else cur="亿";
                    
                }
            String strx;
            if(dotPos!=-1) {//有小数
            strx = money.substring(dotPos+1);
            if (strx.length() > 2)  {
                System.out.println("金额只允许两位小数!");
                throw new IllegalArgumentException("金额只允许两位小数!");
                //return null;
            }
            int xiaoshu = Integer.parseInt(strx);//小数部分
            if(xiaoshu==0||strx.length()==0) {
                chRMB.append("圆整");//整
            }
            else
            chRMB.append("圆");
            if(strx.length()==1) {
                chRMB.append(chs[xiaoshu]).append("分");
            }
            else {
                if(xiaoshu/10!=0) {
                    chRMB.append(chs[xiaoshu/10]).append("角");
                }
                else {
                    chRMB.append("零");
                }
                if(xiaoshu%10!=0) {
                    chRMB.append(chs[xiaoshu%10]).append("分");
                }
            }
            }
            else {
                chRMB.append("圆整");
            }
            
            return chRMB.toString();
        }
        /** *//**
         * 
         * @param number 输入数字串
         * @return 转换后的大写金额
         * @throws NumberFormatException 不合法的数字
         * 将最多四位整数转换成大写金额
         */
        public static String fourMaxChange(String number)
                throws NumberFormatException  {// 将最多四位整数转换成大写金额
            StringBuilder rs = new StringBuilder();
            int money;
            money = Integer.parseInt(number);
            boolean zero = false;
            if (money / 1000 != 0)  {
                zero = true;
                rs.append(chs[money / 1000]).append("仟");
                money %= 1000;
            }
            if (money / 100 != 0)  {
                zero = true;
                rs.append(chs[money / 100]).append("佰");
                money %= 100;
            } else if (zero == true)  {
                rs.append(chs[0]);// 零
                money %= 100;
            }
            if (money / 10 != 0)  {
                zero = true;
                rs.append(chs[money / 10]).append("拾");
                money %= 10;
            } else if (zero == true && !rs.substring(rs.length() - 1).equals("零"))  {
                rs.append(chs[0]);// 零
                money %= 10;
            }
            if (money != 0)  {
                zero = true;
                rs.append(chs[money]);
            } else if (zero == true && rs.substring(rs.length() - 1).equals("零"))  {
                rs.delete(rs.length() - 1, rs.length());
            }
            if (zero == true)
                return rs.toString();
            else
                return chs[0];//零
        }
        public static void main(String[] args)  {
            System.out.println(numToRMB("12,0000,0000,0403,0012,0000.02"));
        }
    }
      

  7.   

    个人觉得把数字拆成LIST 然后弄个HASHMAP KEY为数字 value为对应的大写中文。然后用containsKey()去判断搜是否有值 有的话就get()出来。