⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 changetype.java

📁 数字转中文源代码
💻 JAVA
字号:
/* 
*文件名:ChangeType.java 
* 
*
*
*题目:数字转中文 
*说明: 
*1。有两个编辑框,一个用于输入阿拉伯数字,一个用于输出中文字符串,一个按钮。 
*2。阿拉伯数字可包括小数,整数部分不超过13位,小数部分不超过4位。 
* 1205404.36---转换为---壹佰二拾万五仟肆佰零肆点叁陆 
* 
*编程思路: 
*编制两个编辑框,和一个按钮 
*在文本框内输入数字,捕捉键盘输入,将键盘输入:数字,小数点,已经退格键和非法输入区别开。 
*将键盘的输入传送给String型的result_1。 
*对result_1进行分解,分解成整数和小数。 
*整数要分成几个单位:个位到千位,万位到千万位,亿位到万亿位 
*分别传入转化成中文的函数ChangeChinese(),进行转化。 
*之后在第二个文本框中显示。 
* 
*注意的地方: 
*输入零的问题:1)零在中间,两个以上的零,只能显示一个零 2)零在末尾,不能显示零。 
* 
*待改进的地方 
*用鼠标在中间位置插入数字不能正确计算 
*用鼠标进行剪贴,粘贴,复制则不能正确计算 
*/ 

import java.awt.* ; 
import java.awt.event.* ; 

public class ChangeType 
{ 
    private Frame f1 ; 
    private Button b1 ; 
    private TextField t1,t2 ; 
    private int dot_1,length_1 ; 
    private String result_1; 

    public ChangeType() 
    { 
       f1 = new Frame("数字转中文 ") ; 
       b1 = new Button("转换") ; 
       t1 = new TextField("",40) ; 
       t2 = new TextField("",40) ; 
     } 

    public void launch( ) //实现窗口 
    { 
       f1.add(t1,BorderLayout.NORTH); 
       f1.add(b1,BorderLayout.CENTER); 
       f1.add(t2,BorderLayout.SOUTH) ; 
       f1.setSize(450,100 ) ; 
       f1.setVisible(true); 

       f1.addWindowListener(new WindowAdapter() //匿名类实现出口关闭功能 ; 
       { public void windowClosing(WindowEvent e) 
       { System.exit(0); } } ); 
       b1.addActionListener(new Handle()) ; //注册button按钮 
       t1.addKeyListener( new NewHandler()) ; //注册textfiled按钮 
       t2.addKeyListener( new NewHandler1()) ; //注册textfiled按钮 
     } 
private class Handle implements ActionListener 
{ 
private int zhengshu_1,xiaoshu_1 ; 
private String result_2 ; 
private boolean zero_null_1 = true ; 
private boolean bo1= true ; 
public void actionPerformed(ActionEvent e) 
{ 
if(result_1==null) //如果没有输入任何数字,则提示输入 
{t2.setText("请输入数字");} 
else 
{ if(dot_1==0) //若输入数字中没有小数 
{ 
zhengshu_1 = result_1.length() ; 
ChangeInteger(zhengshu_1) ; 
} 
else //若输入的数字中有小数 
{ 
zhengshu_1 = dot_1-1 ; 
ChangeInteger(zhengshu_1) ; 
xiaoshu_1 = dot_1-1 ; 
ChangeXiaoshu(xiaoshu_1) ; 
} 
t2.setText(result_2) ; 
} 
} 
public void ChangeInteger(int a) 
{ 
String temp_s1 ; 
int temp_1 = 0 ; 
bo1 = true ; 
result_2 = "" ; 
if(a==13) //若为十三位整数,即到万亿 
{ 
result_2 = ChangeChinese(result_1.substring(0,5)) + "亿" ; 
if(ChangeChinese(result_1.substring(5,9))!=null) //第5,9位输入不全是零 
result_2 =result_2+ChangeChinese(result_1.substring(5,9)) +"万" ; 
else {} 
if(ChangeChinese(result_1.substring(9,13))!=null) //第9,13位输入不全是零 
result_2 =result_2+ChangeChinese(result_1.substring(9,13)) ; 
else {} 
} 
else //小于十三位整数,即小于万亿 
{ 
for( int i = 0 ; i < 3 ; i ++ ) 
{ 
if ((a-4) <= 0 ) 
{ 
temp_1 ++ ; 
temp_s1 = ChangeChinese(result_1.substring(0,a)) ; 
if(zero_null_1) //如果返回值不等于null 
{ 
if(temp_1==2) {result_2 = temp_s1+"万"+result_2 ;} 
else if(temp_1==3) {result_2 =temp_s1+"亿"+result_2 ;} 
else { result_2 =temp_s1 ; } 
break ; 
} 
else{} 

} 
else 
{ 
temp_1 ++ ; 
temp_s1 = ChangeChinese(result_1.substring(a-4,a)) ; 
if( zero_null_1) //如果返回值不等于null 
{ 
if(temp_1==2) {result_2 = temp_s1+"万"+result_2 ;} 
else if(temp_1==3) {result_2 = temp_s1+"亿"+result_2 ;} 
else { result_2 = temp_s1; } 
} 
else{} 
} 
a = a - 4 ; 
} 
} 

} 
public void ChangeXiaoshu (int a ) 
{ 
bo1 = false ; 
result_2 = result_2 + ChangeChinese(result_1.substring(a,result_1.length())) ; 
} 
public String ChangeChinese(String st1) 
{ 
int ai1 = st1.length() ; 
int ai2 = 0 ; 
int ai3 = 0 ; 
String st2 = null ; 
String st3 = null ; 
for(int i = ai1-1 ; i>=0 ; i--) 
{ 
char c1 = st1.charAt(i) ; 
switch(c1) 
{ 
case ′1′: 
st2 = "壹" ; 
break ; 
case ′2′: 
st2 = "贰" ; 
break ; 
case ′3′: 
st2 = "叁" ; 
break ; 
case ′4′: 
st2 = "肆" ; 
break ; 
case ′5′: 
st2 = "伍" ; 
break ; 
case ′6′: 
st2 = "陆" ; 
break ; 
case ′7′: 
st2 = "柒" ; 
break ; 
case ′8′: 
st2 = "捌" ; 
break ; 
case ′9′: 
st2 = "玖" ; 
break ; 
case ′0′: 
st2 = "零" ; 
break ; 
case ′.′ : 
st2 = "点"; 
break ; 
} 
if(bo1) //解决整数部分输入为两个零,或者末尾为零的情况 
{ 
if(ai2==0&&st2=="零") { st2 = null ;ai3++;} 
else if(ai2==0&&st2!="零") st2 = st2 ; 
else if(ai2==1&&st2!="零")st2 = st2 +"拾" ; 
else if(ai2==2&&st2!="零")st2 = st2 +"佰"; 
else if(ai2==3&&st2!="零")st2 = st2 +"仟"; 
else if(ai2==4&&st2!="零")st2 = st2 +"万"; 
else {ai3++;if(ai3>1){st2 = null;}else{st2 = st2 ;}} 
ai2++ ; 
if (st2==null) {st3 = st3 ;} 
else if(st3 == null) {st3 = st2 ;} 
else {st3 = st2+ st3 ; } 
} 
else //小数部分 
{ 
if (st3==null){st3 = st2 ;} 
else {st3 = st2+ st3; } 
} 
} 
if(st3==null){zero_null_1 = false;} 
else{zero_null_1 = true;} 
return st3 ; 
} 
} 
private class NewHandler extends KeyAdapter 
{ 
private int test1; 
private int test2 = 13 ; 
public void keyPressed(KeyEvent e) 
{ 
char c1 = e.getKeyChar( ); 
if( Character.isDigit(c1)||c1==′.′) //排除错误输入问题,只接受数字和小数点 
{ 
if(c1==′.′) //输入的为小数点 
{ 
test1++ ; 
if(test1> 1) //仅准许有一个小数点 
{ e.consume() ; } 
else 
{ 
length_1++; 
test2 = length_1+4; 
dot_1 = result_1.length()+1 ; 
} 
} 
else //输入的不是小数点 
{ length_1++; } 
if(length_1>test2) //限定整数部分不超过13位,小数部分不超过4位 
{ 
e.consume() ; 
length_1-- ; 
} 
else 
{ 
if(length_1==1) 
{result_1=String.valueOf(c1);} 
else 
{ result_1 = result_1 + c1;} 
} 
} 
else 
{ 
if(e.getKeyCode()==KeyEvent.VK_BACK_SPACE) //退格键 
{ 
try //退没了,会抛出exception 
{ 
if(result_1.charAt(result_1.length()-1)==′.′) 
{ 
result_1=result_1.substring(0,result_1.length()-1); 
length_1--; 
dot_1 = 0 ; 
test1--; 
test2 = 13 ; 
} 
else 
{ 
result_1=result_1.substring(0,result_1.length()-1); 
length_1--; 
} 
}catch(RuntimeException ex){result_1 = null ; } 
} 
else{e.consume();} 
} 
} 
} 
private class NewHandler1 extends KeyAdapter 
{ 
public void keyPressed(KeyEvent e) 
{e.consume( );} 
} 
    public static void main(String args[ ]){ 
        ChangeType changetype1 = new ChangeType( ) ; 
        changetype1.launch( ) ; 
     } 
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -