java人民币读法转换

实现浮点数转换成人民币读法字符串

编写一个程序,将浮点数转换成人民币读法字符串,

例如:    将1006.333转换为壹千零陆元叁角叁分。

题意分析:

将浮点数分成整数部分和小数部分,分开处理整数部分和小数部分。

小数部分的处理比较简单,截取保留两位数字,并将其转换成几角几分的字符串即可。

整数部分可以以4位数字分为几个数组,每一个4位数字都是几千几百几十几(添加适当的单位)。

这4位数字若出现在1~4位,则后面添加‘元’,若出现在5~8位,则添加‘万’,若出现在9~12位,则添加‘亿’。

超过12位以后,暂不考虑,实际上,超过12位数后,double类型存储溢出,会造成数据的错误。

代码编译分析:

将浮点数分成整数部分和小数部分字符串,只要把double型的浮点数强制转换成long型即可得到整数部分,

将double型的浮点数减去long型的整数部分即可得到浮点数的小数部分,由于只需取两位则乘以100,再用

Math.round函数取整得到小数部分。用“zheng+”“ ”或"String.valueOf(xiao)"将整数转换为字符串。

将小数部分的字符串逐个进行判断,在其后面适当的增加角、分,即可转换成功。

将整数部分的字符串补零,使其字符串长度成为4的倍数,以便4位一组的分组。使用字符串截取函数截取后4

位的字符串,并使原字符串更新为除去后4位以后的字符串。

4位一组的字符串进行汉字字符的转换,若非最后一位数字且数字不为零,则需添加单位。

每四位的已转换好的汉字字符串连接时需注意顺序。

特殊情况分析:

若数字小数点后一位为0,如19.08,则需在小数部分转换时考虑小数部分字符串的长度,若长度为1,则特殊处理。

若数字如10009所示,后四位截取后为0009,转换时易出现错误,需将其转换为字符串9后再将其进行汉字字符的

转换。

若数字如1009所示,2个零相邻,则需对转换时单个字符为0时的前一个字符进行判断,是否需要进行转换操作。

若数字如1890所示,最后一位为零,则需对转换后的字符串进行判断最后一个字符是否为零,是否需要删去。

若数字如0.89,或10000.89所示,截取的4位字符串位0,则需单独进行转换操作。

1 package人民币读法;2

3 importjava.util.Arrays;4 importjava.util.Scanner;5

6 //编写一个程序,将浮点数转换成人民币读法字符串,例如,将1006.333转换为壹千零陆元叁角叁分7 //D:\疯狂Java讲义\codes\04\4.6 NUM2RMB

8

9 public classRmb {10 private String[] str1 = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};11 private String[] str2 = {"十","百","千"};12 private String[] str3 = {"角","分"};13 private String[] str4 = {"元","万","亿"};14 //把浮点数分解成整数部分字符串

15 private String divadeZheng(doublenum)16 {17 long zheng = (long)num;18 //整型转换成字符串

19 return zheng + "";20 }21 //把浮点数分解成小数部分字符串

22 private String divadeXiao(doublenum)23 {24 long zheng = (long)num;25 //得到浮点数的小数部分

26 long xiao = Math.round((num-zheng)*100);27 //用方法把整型转换成字符串

28 returnString.valueOf(xiao);29 }30

31 //把小数部分的数字字符串转换成汉字字符串

32 privateString toStr1(String xiao)33 {34 String re1 = "";35 int len =xiao.length();36 if(len==2)37 {38 for(int i = 0;i<2;i++)39 {40 //把字符串转换成数字

41 int num = xiao.charAt(i) - 48;42 //数字不为零则需要加单位,为零则不操作

43 if(num!=0)44 {45 re1 += str1[num] +str3[i];46 }47 }48 }49 //若长度为1,例:12.09小数部分为9

50 if(len==1&&xiao.charAt(0)!='0')51 {52 int num = xiao.charAt(0) - 48;53 //此时只有分,加单位str3【1】

54 re1 +=str1[num] + str3[1];55 }56 returnre1;57 }58

59 //把一个四位的数字字符串变成汉字字符串

60 privateString toStr(String zheng)61 {62 String re = "";63 int j = 0;64 int lenz =zheng.length();65 //特殊情况如输入0.89时,整数字符串为0的处理

66 if(zheng.charAt(0)=='0'&&lenz==1)67 {68 re +="零";69 returnre;70 }71 //遍历每一位数字

72 for(int i =0;i

76 if(i!=lenz-1&&num!=0)77 {78 re += str1[num]+str2[lenz-2-i];79 }80 //对于连续0出现的特殊处理,如1009,第二个零不进行操作

81 else if(!(num==0&&re.charAt(j-1)=='零'))82 {83 re +=str1[num];84 }85 j =re.length();86 }87 //对特殊情况最后一位是零的处理,如1990,删除掉末尾的零

88 if(re.charAt(j-1)=='零')89 {90 re = re.substring(0, j-1);91 }92 returnre;93 }94 //对于金额的整数部分在12位数以内的处理,以4位数为一组,95 //如1234(亿),5678(万),1234(元).89,

96 privateString zhengDivade(String zheng)97 {98 int len =zheng.length();99 String Re = "";100 int n = 0;101 //判断整数部分的长度,考虑需要分几个组

102 if(len>=9)103 n = 3;104 else if(len>=5)105 n = 2;106 else if(len>=1)107 n = 1;108 //若位数非4的倍数,则在前面补0,直到位数为4的倍数为止109 //如 12,2345补为0012,2345

110 if(len%4!=0)111 {112 String zh = "";113 int s = len%4;114 //在前面补0

115 for(int k=0;k

124 for(int i=0;i

129 len =zheng.length();130 //提取出整数部分后四位,进行分开的转换

131 Zheng = zheng.substring(len-4);132 //除去已经提取的字符串以外的字符串,字符串更新

133 zheng = zheng.substring(0, len-4);134 int m =0,me=0;135 //把字符串转换成整形数,如 0012换成12

136 for(int j=3;j>=0;j--)137 {138 m =(int) ((Zheng.charAt(j)-48)*Math.pow(10, 3-j));139 me +=m;140 }141 //把数字12装换成字符串12

142 Zheng =String.valueOf(me);143 //把字符串12换成 壹拾贰

144 sss = this.toStr(Zheng);145 //衔接上 元 等单位,再加上已经转换好的 汉字字符串 ,此处注意每组字符串间的顺序

146 sss += str4[i]+Re;147 Re =sss;148 }149 returnRe;150 }151

152 //主方法,输入金额,并将整数部分和小数部分联接

153 public static voidmain(String[] args) {154 //TODO Auto-generated method stub

155 Rmb s = newRmb();156 System.out.println("请输入整数部分为十二位以内的金额:");157 Scanner in = newScanner(System.in);158 double a =in.nextDouble();159 System.out.println("人民币读法为:");160 //将整数部分的汉字字符串和小数部分的汉字字符串联接

161 System.out.println(s.zhengDivade(s.divadeZheng(a))+s.toStr1(s.divadeXiao(a)));162 }163

164 }

posted @ 2018-03-28 20:03 Reyon 阅读(...) 评论(...) 编辑 收藏

人民币读法的java程序_java人民币读法转换相关推荐

  1. 人民币读法的java程序_Java浮点数转人民币读法

    packagetheTest;public classNumToRmb {private String[] hanArr={"零","壹","贰&qu ...

  2. java程序_Java程序员必备----Java命令大全

    1.java.exe: ====================== 运行java程序,这个相信每一位用Java的人知道了.2.javac.exe: ====================== 编译 ...

  3. jav中什么是组织java程序_Java程序的执行过程中用到一套JDK工具,其中javaprof.exe是指()。A.Java调试器B.Java剖析工具C.Jav...

    Java程序的执行过程中用到一套JDK工具,其中javaprof.exe是指().A.Java调试器B.Java剖析工具C.Jav 更多相关问题 "投资收益"账户属于(). A.损 ...

  4. 用条件运算符编写java程序_Java 编程入门课程丨第 8 单元:条件运算符和控制语句...

    原标题:Java 编程入门课程丨第 8 单元:条件运算符和控制语句 教程概览 本单元是"Java 编程入门"课程的第 8 部分.尽管各单元中讨论的概念具有独立性,但实践组件是在您学 ...

  5. 简单计算机java程序_JAVA程序员需要知道的计算机底层基础10-操作系统引导程序的简单...

    JAVA程序员需要知道的计算机底层基础10-操作系统引导程序的简单 JAVA程序员需要知道的计算机底层基础10-操作系统引导程序的简单制作 汇编实现引导程序 ; 文件名 boot.asm org 7c ...

  6. Java实现pdf转tex_使用Free Spire.PDF在Java程序中创建和转换PDF文件

    在这篇文章中,我将举例说明如何创建一个包含标题,段落,图像,编号列表和表格的简单的PDF文件,以及如何使用Free Spire.PDF将PDF转换为其他文件格式. 概述 Free Spire.PDF ...

  7. 在Java程序中创建和转换PDF文件

    点击上方关注 "终端研发部" 设为"星标",和你一起掌握更多数据库知识 作者: Codingqi123 来源: jianshu.com/p/db15232987 ...

  8. idea 编译java程序_Java,Hello World,《算法》环境搭建中的问题,用 cmd 和 IntelliJ Idea 分别编译和运行 Java 程序...

    ▶ IntelliJ idea 下载和安装(http://www.jetbrains.com/idea/) ▶ 新建项目(如图),注意选择 SDK 类型和位置 ● 在 src 目录中新建一个 Pack ...

  9. 经典的java程序_Java经典程序

    } } } ----------------- 结果: A B D C B D C B ----------------- 2.写出程序运行结果 import java.lang.StringBuff ...

最新文章

  1. 记录一款好用的JS插件,artDialog中国人自己写的插件
  2. ieda中快捷搜索_IntelliJ IDEA IDE设置系列教程(十):在工具窗口中快速搜索
  3. 数据结构 - 如何判断两个无环单链表是否相交;如果相交,给出相交的第一个结点
  4. 2017matlab版本Simulink 学习笔记整理
  5. php listview,ListView Item多布局的实现
  6. 图像处理 --- 三、图像变换 3.2 图像的几何变换
  7. 从零开始学网络|搞懂OSI参考模型和TCP/IP分层模型,看这篇文章就够了
  8. java上机实验答案_java上机实验答案与解析
  9. 2018年9月计算机英语统考,2018年9月大学英语统考题库 2018年9月网络统考英语B复习资料.doc...
  10. Oracle数据库awr报告使用与分析
  11. rk3399_android7.1平台调试sensor流程记录
  12. 【转】粒子滤波简介以及相关技术探讨
  13. 关于HTTP缓存的故事
  14. 软件测试面试必问的10个问题
  15. 基于关联规则(Apriori)+协同过滤(collaborative filtering)实现电影推荐系统
  16. 【傲腾观察室】英特尔® 傲腾™技术如何助力金融行业关键业务应用?
  17. 基于强化学习的五子棋算法设计-python代码完整实现
  18. CodeBlocks(20.03)下安装easyx
  19. b站网页版没有html播放,网页b站能小窗口播放吗?怎么播放?最新版本bilibili小窗口播放器...
  20. 初二因式分解奥数竞赛题_(完整)初中数学竞赛因式分解专题

热门文章

  1. CSP-S信息学奥赛考试大纲(提高级)
  2. 建造者模式,你学废了吗?
  3. 畅捷通T+与畅捷通T+对接集成批量新增销售订单连通存货批量创建(批量新增销售订单)
  4. 42.django03
  5. 2020低压电工模拟考试题及低压电工模拟考试题库
  6. VxWorks 7 VxWorks 7 plus
  7. Openwrt实现双4G模块拨号
  8. 防火墙安全策略功能入门
  9. 2020年 Vue 面试题及答案 热门
  10. script标签中写html,html中script标签的详细介绍