我上年4月分做的,还有待非常小问题测试(控制输入错误光标移动位置后还是前)具体你可看封装函数进行改改import java.awt.*;
import java.applet.*;
import java.awt.event.*;public class TestNum extends Applet implements TextListener
{
TextArea ta1,ta2;
String sRight="";

public void init()
{
ta1=new TextArea("",10,60);ta1.setRows(1);
ta2=new TextArea("",3,60);ta2.setEditable(false);
add(ta1);add(ta2);
ta1.addTextListener(this);
}
public void textValueChanged(TextEvent e)
{
if(e.getSource()==ta1)
{
if(isNumber(ta1))
{
String str =sDelAfterZero(ta1.getText());
String str1 =sNumToRMB(str);
ta2.setText(str1); sRight=str;
}
else
ta1.setText(sRight);

}
} public boolean isNumber(TextArea tfd)
{
int iVaildDec=0;
String str=tfd.getText(); if(str.length()<=1&&str.substring(0,1).equals("0"))
return true;
if(str.substring(0,2).equals("0.")) return true;
if(str.length()>1&&str.substring(0,1).equals("0"))
return false; byte btemp[]=str.getBytes(); //'0'~'9' AscII is 48~57 and decimal is 46
for(int i=0;i<str.length();i++)
if(btemp[i]==46)
{ iVaildDec++;
if(iVaildDec>1)
return false;
}
else if(!(btemp[i]>47&&btemp[i]<58))
return false; return true;
} //小数消重多零算法函数;
public String sDieNDec(String sDec)
{
boolean bAddZero=true;
String sput="";
for(int i=0;i<sDec.length();i++)
if(sDec.substring(i,i+1).equals("零"))
{ if(bAddZero)
{
sput+="零";
bAddZero=false;
}
}else
{
sput+=sDec.substring(i,i+1);
bAddZero=true;
}
//  ^____扫全部多零冗余;

if(sput.length()==0||sput.length()==1)
return sput;

if(sput.substring(sput.length()-1,sput.length()).equals("零"))
{
int i=sput.length();
for(;sput.substring(i-1,i).equals("零")&&i>1;i--)
;;
return sput.substring(0,i);

}
else
return sput;
}

//删除整数前位0算法函数;
public String sDelAfterZero(String DAZ)
{
int i=0;
if(DAZ.length()==0)
return "零";
if(DAZ.substring(0,1).equals("0"))
{
while(DAZ.substring(i,i+1).equals("0")&&i<DAZ.length()-1)
i++;
} return DAZ.substring(i);
}

public String sNumToRMB(String sNum) //传完全正确字符型Num,可事先调用isNumber()过滤;
{
String  snResult=sNum; int iDecTotal=0; //小数共位
int iIntTotal=0; //整数共位; //确定整数小数位分隔
int iTemp;
for(iTemp=0;iTemp<snResult.length();iTemp++)
if(snResult.substring(iTemp,iTemp+1).equals("."))
{ iIntTotal=iTemp;
iDecTotal=snResult.length()-iTemp-1;
break;
}
if(iTemp==snResult.length())
{
iIntTotal=snResult.length();
snResult+=".";
iDecTotal=snResult.length()+1;

}
//---------------

//捕捉异常返回;
if(iIntTotal>16)
return "----千兆位以上升级请与公司联系!!!";
//---- String sDec=snResult.substring(iIntTotal+1); //小数位阿拉伯结果 sDec;
String  s1=new String("个拾佰仟"); //其中以s1的0号下标以sDigit数组变化根据位数取余
String  sDigit[]={"点","万","亿","兆"};
String temp="",temp2="",tempend=""; for(int i=0;i<iIntTotal;i++)
if(i<iIntTotal%4)
{
s1=s1.replace(s1.substring(0,1).charAt(0),sDigit[iIntTotal/4].charAt(0));

temp +=snResult.substring(i,i+1);
temp +=s1.substring(java.lang.Math.abs((i-iIntTotal%4))-1,java.lang.Math.abs(i-iIntTotal%4));
}
else
temp2+=snResult.substring(i,i+1);

for(int i=0;i<temp2.length();i++)
{
s1=s1.replace(s1.substring(0,1).charAt(0),sDigit[temp2.length()/4-i/4-1].charAt(0));
tempend +=temp2.substring(i,i+1);
tempend +=s1.substring(4-i%4-1,4-i%4);
}

tempend=temp+tempend;

String scb=new String("零壹贰叁肆伍陆柒捌玖");
for(int i=0;i<=9;i++)
{
tempend=tempend.replace(String.valueOf(i).charAt(0),scb.substring(i,i+1).charAt(0));
sDec=sDec.replace(String.valueOf(i).charAt(0),scb.substring(i,i+1).charAt(0));//同转小数阿拉伯为中文
}

String ctep="";
boolean bzero=true; //零仟佰拾位未出现,以此判断连续零,是否为结果加零;
for(int i=0;i<tempend.length();i+=2)
{
String str=tempend.substring(i,i+2);

if(str.equals("零万")||str.equals("零亿")||str.equals("零兆")) //允许升级,相应数据位数组应升级;
{
str=str.substring(1,2); bzero=false;
} //跟据以上条件加以下条件进行拼接;
if(str.equals("零仟")||str.equals("零佰")||str.equals("零拾"))
{
if(bzero)
{
  ctep+="零";
  bzero=false;
}
}
else
{
ctep+=str;
bzero=true;
}
//------------
}

//扫描过滤最后多零问题即:零零,零点,零万,零亿,零兆.....==>零
//允许升级,相应数据应升级,对或操作添加更高位数;
//必要可做成函数,再次筛滤泡沫

String sput="";
for(int i=0;i<ctep.length();i++)
{
String sput1="",sput2="";
sput1=ctep.substring(i,i+1);
if(sput1.equals("零"))
{
sput2=ctep.substring(i+1,i+2); 
if(sput2.equals("零")||sput2.equals("点")||sput2.equals("万")||sput2.equals("亿")||sput2.equals("兆"))
sput1="";
}
sput+=sput1;
}
if(sput.length()==0) sput="零点";
//----------------
//解决兆亿万问题;
String s="";
sput+="@";
for(int i=0;i<sput.length()-1;i++)
{
if(sput.substring(i,i+2).equals("亿万"))
{ i++;s+="亿";}
else
s+=sput.substring(i,i+1);
}
sput=s;
sput+="@";

s="";
for(int i=0;i<sput.length()-1;i++)
{
if(sput.substring(i,i+2).equals("兆亿"))
{ i++;s+="兆";}
else
s+=sput.substring(i,i+1);
}
sput=s;
//有空优化; sput+=sDieNDec(sDec);

if(sput.substring(sput.length()-1,sput.length()).equals("点"))
{
if(sput.length()==1) return "零";
return sput.substring(0,sput.length()-1);
}
else
return sput;
}
}

解决方案 »

  1.   

    我帮你写了一个,你可得记得报答我呀
    package c05;class ConvertNum
    {
        private String m_value = null;
        public void setValue(String value)
        {
            m_value = convert(value);
        }    public String getValue()
        {
            return m_value;
        }    private String convert(String value)
        {
            int valueNum = Integer.parseInt(value);
            String label = null;
            switch(valueNum)
            {
                case 0:
                    label = "零";
                    break;
                case 1:
                    label = "壹";
                    break;
                case 2:
                    label = "贰";
                    break;
                case 3:
                    label = "叁";
                    break;
                case 4:
                    label = "肆";
                    break;
                case 5:
                    label = "伍";
                    break;
                case 6:
                    label = "陆";
                    break;
                case 7:
                    label = "柒";
                    break;
                case 8:
                    label = "捌";
                    break;
                case 9:
                    label = "玖";
                    break;
                default:
                    label = "";
            }
            return label;
        }
    }public class MyMain
    {
        public MyMain()
        {
        }    public void upcaseNumber(String num)
        {
            int localNum = num.indexOf(".");
            String integerNum = num.substring(0,localNum);
            String myStr  = null;        ConvertNum converNum = new ConvertNum();        for (int i = 0; i < localNum; i++)
            {
                converNum.setValue(integerNum.substring(i,i + 1));            if (myStr != null)
                {
                    myStr = myStr + setIntegerUnit(localNum - i) + converNum.getValue();
                }
                else
                {
                    myStr = converNum.getValue();
                }
            }
            myStr = myStr + "元";        String zeroNum = num.substring(localNum + 1, num.length());        for (int i = 0; i < zeroNum.length(); i++)
            {
                converNum.setValue(zeroNum.substring(i,1 + i ));
                myStr = myStr + converNum.getValue() + setIntegerUnit(12 + i);
            }
            System.out.println("--------" + myStr);    }    private String setIntegerUnit(int no)
        {
            String label = null;
            switch(no)
            {
                case 1:
                    label = "十";
                    break;
                case 2:
                    label = "百";
                    break;
                case 3:
                    label = "千";
                    break;
                case 4:
                    label = "万";
                    break;
                case 5:
                    label = "十";
                    break;
                case 6:
                    label = "百";
                    break;
                case 7:
                    label = "千";
                    break;
                case 8:
                    label = "亿";
                    break;
                case 10:
                    label = "十";
                    break;
                case 11:
                    label = "百";
                    break;
                case 12:
                    label = "角";
                    break;
                case 13:
                    label = "分";
                    break;
                default:
                    label = "";
            }
            return label;
        }    public static void main(String[] args)
        {
            MyMain myMain = new MyMain();
            myMain.upcaseNumber("123456789.33");
        }
    }
      

  2.   

    仁兄误会了,不要动不动就发火,什么骗不骗的。我的意思是你的是大做,我的是小题,我用不着你这么复杂的代码,您老的是给银行的,所以这么严谨这么冲,我只要个函数就行了。如果我改你的,有读懂代码的时间还不如自己写。只是今天要改好而我还在客户公司没办法给别人机器装weblogic什么的调试。我不敢保证一次写了就是成功的,只有求助于CSDN这个大家庭了。谢谢各位
      

  3.   

    sandyen(杉叶),谢谢你,会报答的,不过我想要纯数字的不是金额的。比如3005.00可以转成仨仟零伍,而3005.21可以转成仨仟零伍点贰壹。
    谢谢!
      

  4.   

    那你把调用setIntegerUnit这个方法去掉就可以了呀
      

  5.   

    这人说话不算话,归入:
    http://expert.csdn.net/Expert/topic/1539/1539687.xml?temp=.9202387
      

  6.   

    vcvj(Mr.wu)你这个人很炝。你可以请管理员看看我的结贴率。工作实在太忙。今天一上班就来结这个贴子。晚了些,不好意思,但绝对没有赖的意思。你说的那个贴我留过言,反正分已经撒出去了,不结也收不回来,何乐而不为呢。不管有没有用上各位的代码,大家的帮助在下谢过!!!请接分。