我上年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;
}
}
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;
}
}
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");
}
}
谢谢!
http://expert.csdn.net/Expert/topic/1539/1539687.xml?temp=.9202387