Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 373|回复: 0

[Java基础知识]数字转中文源代码

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-1 11:58:29 | 显示全部楼层 |阅读模式
    运行界面:
       
       
    1. /*
    2. *文件名:ChangeType.java
    3. *
    4. *
    5. *
    6. *题目:数字转中文
    7. *说明:
    8. *1。有两个编辑框,一个用于输入阿拉伯数字,一个用于输出中文字符串,一个按钮。
    9. *2。阿拉伯数字可包括小数,整数部分不超过13位,小数部分不超过4位。
    10. * 1205404.36---转换为---壹佰二拾万五仟肆佰零肆点叁陆
    11. *
    12. *编程思路:
    13. *编制两个编辑框,和一个按钮
    14. *在文本框内输入数字,捕捉键盘输入,将键盘输入:数字,小数点,
    15. *已经退格键和非法输入区别开。
    16. *将键盘的输入传送给String型的result_1。
    17. *对result_1进行分解,分解成整数和小数。
    18. *整数要分成几个单位:个位到千位,万位到千万位,亿位到万亿位
    19. *分别传入转化成中文的函数ChangeChinese(),进行转化。
    20. *之后在第二个文本框中显示。
    21. *
    22. *注意的地方:
    23. *输入零的问题:1)零在中间,两个以上的零,只能显示一个零 2)零在末尾,不能显示零。
    24. *待改进的地方
    25. *用鼠标在中间位置插入数字不能正确计算
    26. *用鼠标进行剪贴,粘贴,复制则不能正确计算
    27. */
    28. import java.awt.* ;
    29. import java.awt.event.* ;
    30. public class ChangeType
    31. {
    32.     private Frame f1 ;
    33.     private Button b1 ;
    34.     private TextField t1,t2 ;
    35.     private int dot_1,length_1 ;
    36.     private String result_1;
    37.     public ChangeType()
    38.     {
    39.        f1 = new Frame("数字转中文 ") ;
    40.        b1 = new Button("转换") ;
    41.        t1 = new TextField("",40) ;
    42.        t2 = new TextField("",40) ;
    43.      }
    44.     public void launch( ) //实现窗口
    45.     {
    46.        f1.add(t1,BorderLayout.NORTH);
    47.        f1.add(b1,BorderLayout.CENTER);
    48.        f1.add(t2,BorderLayout.SOUTH) ;
    49.        f1.setSize(450,100 ) ;
    50.        f1.setVisible(true);
    51.        f1.addWindowListener(new WindowAdapter() //匿名类实现出口关闭功能 ;
    52.        { public void windowClosing(WindowEvent e)
    53.        { System.exit(0); } } );
    54.        b1.addActionListener(new Handle()) ; //注册button按钮
    55.        t1.addKeyListener( new NewHandler()) ; //注册textfiled按钮
    56.        t2.addKeyListener( new NewHandler1()) ; //注册textfiled按钮
    57.      }
    58. private class Handle implements ActionListener
    59. {
    60. private int zhengshu_1,xiaoshu_1 ;
    61. private String result_2 ;
    62. private boolean zero_null_1 = true ;
    63. private boolean bo1= true ;
    64. public void actionPerformed(ActionEvent e)
    65. {
    66. if(result_1==null) //如果没有输入任何数字,则提示输入
    67. {t2.setText("请输入数字");}
    68. else
    69. { if(dot_1==0) //若输入数字中没有小数
    70. {
    71. zhengshu_1 = result_1.length() ;
    72. ChangeInteger(zhengshu_1) ;
    73. }
    74. else //若输入的数字中有小数
    75. {
    76. zhengshu_1 = dot_1-1 ;
    77. ChangeInteger(zhengshu_1) ;
    78. xiaoshu_1 = dot_1-1 ;
    79. ChangeXiaoshu(xiaoshu_1) ;
    80. }
    81. t2.setText(result_2) ;
    82. }
    83. }
    84. public void ChangeInteger(int a)
    85. {
    86. String temp_s1 ;
    87. int temp_1 = 0 ;
    88. bo1 = true ;
    89. result_2 = "" ;
    90. if(a==13) //若为十三位整数,即到万亿
    91. {
    92. result_2 = ChangeChinese(result_1.substring(0,5)) + "亿" ;
    93. if(ChangeChinese(result_1.substring(5,9))!=null) //第5,9位输入不全是零
    94. result_2 =result_2+ChangeChinese(result_1.substring(5,9)) +"万" ;
    95. else {}
    96. if(ChangeChinese(result_1.substring(9,13))!=null) //第9,13位输入不全是零
    97. result_2 =result_2+ChangeChinese(result_1.substring(9,13)) ;
    98. else {}
    99. }
    100. else //小于十三位整数,即小于万亿
    101. {
    102. for( int i = 0 ; i < 3 ; i ++ )
    103. {
    104. if ((a-4) <= 0 )
    105. {
    106. temp_1 ++ ;
    107. temp_s1 = ChangeChinese(result_1.substring(0,a)) ;
    108. if(zero_null_1) //如果返回值不等于null
    109. {
    110. if(temp_1==2) {result_2 = temp_s1+"万"+result_2 ;}
    111. else if(temp_1==3) {result_2 =temp_s1+"亿"+result_2 ;}
    112. else { result_2 =temp_s1 ; }
    113. break ;
    114. }
    115. else{}
    116. }
    117. else
    118. {
    119. temp_1 ++ ;
    120. temp_s1 = ChangeChinese(result_1.substring(a-4,a)) ;
    121. if( zero_null_1) //如果返回值不等于null
    122. {
    123. if(temp_1==2) {result_2 = temp_s1+"万"+result_2 ;}
    124. else if(temp_1==3) {result_2 = temp_s1+"亿"+result_2 ;}
    125. else { result_2 = temp_s1; }
    126. }
    127. else{}
    128. }
    129. a = a - 4 ;
    130. }
    131. }
    132. }
    133. public void ChangeXiaoshu (int a )
    134. {
    135. bo1 = false ;
    136. result_2 = result_2 + ChangeChinese(result_1.substring(a,result_1.length())) ;
    137. }
    138. public String ChangeChinese(String st1)
    139. {
    140. int ai1 = st1.length() ;
    141. int ai2 = 0 ;
    142. int ai3 = 0 ;
    143. String st2 = null ;
    144. String st3 = null ;
    145. for(int i = ai1-1 ; i>=0 ; i--)
    146. {
    147. char c1 = st1.charAt(i) ;
    148. switch(c1)
    149. {
    150. case"1":
    151. st2 = "壹" ;
    152. break ;
    153. case"2":
    154. st2 = "贰" ;
    155. break ;
    156. case"3":
    157. st2 = "叁" ;
    158. break ;
    159. case"4":
    160. st2 = "肆" ;
    161. break ;
    162. case"5":
    163. st2 = "伍" ;
    164. break ;
    165. case"6":
    166. st2 = "陆" ;
    167. break ;
    168. case"7":
    169. st2 = "柒" ;
    170. break ;
    171. case"8":
    172. st2 = "捌" ;
    173. break ;
    174. case"9":
    175. st2 = "玖" ;
    176. break ;
    177. case"0":
    178. st2 = "零" ;
    179. break ;
    180. case"." :
    181. st2 = "点";
    182. break ;
    183. }
    184. if(bo1) //解决整数部分输入为两个零,或者末尾为零的情况
    185. {
    186. if(ai2==0&&st2=="零") { st2 = null ;ai3++;}
    187. else if(ai2==0&&st2!="零") st2 = st2 ;
    188. else if(ai2==1&&st2!="零")st2 = st2 +"拾" ;
    189. else if(ai2==2&&st2!="零")st2 = st2 +"佰";
    190. else if(ai2==3&&st2!="零")st2 = st2 +"仟";
    191. else if(ai2==4&&st2!="零")st2 = st2 +"万";
    192. else {ai3++;if(ai3>1){st2 = null;}else{st2 = st2 ;}}
    193. ai2++ ;
    194. if (st2==null) {st3 = st3 ;}
    195. else if(st3 == null) {st3 = st2 ;}
    196. else {st3 = st2+ st3 ; }
    197. }
    198. else //小数部分
    199. {
    200. if (st3==null){st3 = st2 ;}
    201. else {st3 = st2+ st3; }
    202. }
    203. }
    204. if(st3==null){zero_null_1 = false;}
    205. else{zero_null_1 = true;}
    206. return st3 ;
    207. }
    208. }
    209. private class NewHandler extends KeyAdapter
    210. {
    211. private int test1;
    212. private int test2 = 13 ;
    213. public void keyPressed(KeyEvent e)
    214. {
    215. char c1 = e.getKeyChar( );
    216. if( Character.isDigit(c1)||c1==".") //排除错误输入问题,只接受数字和小数点
    217. {
    218. if(c1==".") //输入的为小数点
    219. {
    220. test1++ ;
    221. if(test1> 1) //仅准许有一个小数点
    222. { e.consume() ; }
    223. else
    224. {
    225. length_1++;
    226. test2 = length_1+4;
    227. dot_1 = result_1.length()+1 ;
    228. }
    229. }
    230. else //输入的不是小数点
    231. { length_1++; }
    232. if(length_1>test2) //限定整数部分不超过13位,小数部分不超过4位
    233. {
    234. e.consume() ;
    235. length_1-- ;
    236. }
    237. else
    238. {
    239. if(length_1==1)
    240. {result_1=String.valueOf(c1);}
    241. else
    242. { result_1 = result_1 + c1;}
    243. }
    244. }
    245. else
    246. {
    247. if(e.getKeyCode()==KeyEvent.VK_BACK_SPACE) //退格键
    248. {
    249. try //退没了,会抛出exception
    250. {
    251. if(result_1.charAt(result_1.length()-1)==".")
    252. {
    253. result_1=result_1.substring(0,result_1.length()-1);
    254. length_1--;
    255. dot_1 = 0 ;
    256. test1--;
    257. test2 = 13 ;
    258. }
    259. else
    260. {
    261. result_1=result_1.substring(0,result_1.length()-1);
    262. length_1--;
    263. }
    264. }catch(RuntimeException ex){result_1 = null ; }
    265. }
    266. else{e.consume();}
    267. }
    268. }
    269. }
    270. private class NewHandler1 extends KeyAdapter
    271. {
    272. public void keyPressed(KeyEvent e)
    273. {e.consume( );}
    274. }
    275.     public static void main(String args[ ]){
    276.         ChangeType changetype1 = new ChangeType( ) ;
    277.         changetype1.launch( ) ;
    278.      }
    279. }
    复制代码

       
      
       
      
       
       

         
       

         
       
      
      
      
       
      
       
      

      










    源码下载:http://file.javaxxz.com/2014/10/1/115828453.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-3 16:24 , Processed in 0.338399 second(s), 34 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表