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

将浮点数转换成人民币读法字符串,
例如: 将1006.333转换为壹千零陆元叁角叁分。

整体解析:
将浮点数分成整数部分和小数部分,分开处理整数部分和小数部分。

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

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

这4位数字若出现在14位,则后面添加‘元’,若出现在58位,则添加‘万’,若出现在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,则需单独进行转换操作。


import java.util.Arrays;
import java.util.Scanner;//    编写一个程序,将浮点数转换成人民币读法字符串,例如,将1006.333转换为壹千零陆元叁角叁分public class Rmb {private  String[] str1 =  {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};private  String[] str2 =  {"十","百","千"};private  String[] str3 =  {"角","分"};private  String[] str4 =  {"元","万","亿"};
//    把浮点数分解成整数部分字符串private  String divadeZheng(double num){     long zheng = (long)num;
//        整型转换成字符串return zheng + "";    }
//    把浮点数分解成小数部分字符串private String divadeXiao(double num){long zheng = (long)num;
//        得到浮点数的小数部分long xiao = Math.round((num-zheng)*100);
//        用方法把整型转换成字符串return String.valueOf(xiao);}//    把小数部分的数字字符串转换成汉字字符串private  String toStr1(String xiao){String re1 = "";int len = xiao.length();if(len==2){for(int i = 0;i<2;i++){//                把字符串转换成数字int num = xiao.charAt(i) - 48;
//                  数字不为零则需要加单位,为零则不操作if(num!=0){re1  += str1[num] + str3[i];}}}
//        若长度为1,例:12.09小数部分为9if(len==1&&xiao.charAt(0)!='0'){int num = xiao.charAt(0) - 48;
//            此时只有分,加单位str3【1】re1 +=str1[num] + str3[1];}return re1;}//    把一个四位的数字字符串变成汉字字符串private  String toStr(String zheng){String re = "" ;int j = 0;int lenz = zheng.length();
//        特殊情况如输入0.89时,整数字符串为0的处理if(zheng.charAt(0)=='0'&&lenz==1){re +="零";return re;}
//        遍历每一位数字for(int i =0;i<lenz;i++){int num = zheng.charAt(i) - 48;
//            若不是最后一位数字且数字不为零,则需要添加单位if(i!=lenz-1&&num!=0){re += str1[num]+str2[lenz-2-i];}
//            对于连续0出现的特殊处理,如1009,第二个零不进行操作else if(!(num==0&&re.charAt(j-1)=='零')){re += str1[num];}j = re.length();}
//        对特殊情况最后一位是零的处理,如1990,删除掉末尾的零if(re.charAt(j-1)=='零'){re = re.substring(0, j-1);}return re;}
//    对于金额的整数部分在12位数以内的处理,以4位数为一组,
//    如1234(亿),5678(万),1234(元).89,private String zhengDivade(String zheng){int len = zheng.length();String Re = ""; int n = 0;
//        判断整数部分的长度,考虑需要分几个组if(len>=9)n = 3;    else if(len>=5)n = 2;else if(len>=1)n = 1;
//        若位数非4的倍数,则在前面补0,直到位数为4的倍数为止
//        如 12,2345补为0012,2345if(len%4!=0){String zh = "";int s = len%4;
//            在前面补0for(int k=0;k<(4-s);k++){zh += "0";}zh += zheng;zheng = zh;}
//        进行n个组合的串联
//        进行n次循环for(int i=0;i<n;i++){String Zheng = "";    String sss ="";
//           长度在变化len = zheng.length();
//           提取出整数部分后四位,进行分开的转换Zheng = zheng.substring(len-4);
//           除去已经提取的字符串以外的字符串,字符串更新zheng = zheng.substring(0, len-4);int m =0,me=0;
//           把字符串转换成整形数,如 0012换成12for(int j=3;j>=0;j--){m =(int) ((Zheng.charAt(j)-48)*Math.pow(10, 3-j));me += m;}
//           把数字12装换成字符串12Zheng = String.valueOf(me);
//           把字符串12换成 壹拾贰sss = this.toStr(Zheng);
//           衔接上  元 等单位,再加上已经转换好的 汉字字符串   ,此处注意每组字符串间的顺序sss += str4[i]+Re;Re = sss;}return Re;    }//  主方法,输入金额,并将整数部分和小数部分联接   public static void main(String[] args) {// TODO Auto-generated method stubRmb s = new Rmb();System.out.println("请输入整数部分为十二位以内的金额:");Scanner in = new Scanner(System.in);double a = in.nextDouble();System.out.println("人民币读法为:");
//       将整数部分的汉字字符串和小数部分的汉字字符串联接System.out.println(s.zhengDivade(s.divadeZheng(a))+s.toStr1(s.divadeXiao(a)));}}

java人民币读法转换相关推荐

  1. 人民币读法的java程序_java人民币读法转换

    java人民币读法转换 实现浮点数转换成人民币读法字符串 编写一个程序,将浮点数转换成人民币读法字符串, 例如:    将1006.333转换为壹千零陆元叁角叁分. 题意分析: 将浮点数分成整数部分和 ...

  2. java人民币大小写转换_Java 实现人民币小写转大写[转载http://sunjun.blogchina.com/]

    Java实现人民币小写转大写 import java.io.*; import java.util.*; import java.lang.*; public class money { public ...

  3. java人民币大小写转换_人民币大小写转换

    usingSystem;usingSystem.Text;usingSystem.Text.R using System; using System.Text; using System.Text.R ...

  4. java人民币美元转换_人民币与美元的汇率转换 ------Java实现

    import javax.swing.*; import java.awt.*; import java.awt.event.*; public class changeDollar extends ...

  5. java人民币大小写转换_人民币大小写转换 java 实现

    参考:http://blog.csdn.net/guaishushu1ss/article/details/76757405 对匹配的金额大小,转换规则做了部分修改 工具类: public class ...

  6. java人民币大小写转换函数_java开发_数字转换汉语中人民币的大写_完整版

    1 package com.b510.number2char;2 3 import java.math.BigDecimal;4 5 /**6 * 数字转换为汉语中人民币的大写 7 *8 * @aut ...

  7. Java——人民币大小写转换

    //金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出. public class RenMingBi {private static final ch ...

  8. JAVA浮点数浮点数转换成人民币读法

    侵删! 在<疯狂JAVA讲义>第4章最后练习题中,第5题:编写一个程序,将浮点数转换成人民币读法字符串,例如,将1006.33转换成一千零六元三角三分. 这个题主要是一个逻辑判断的过程.首 ...

  9. JAVA浮点数转人民币读法_算法--java实现将数字转换成人民币大写(迅雷面试题)...

    public classRmb {/*** 人民币的基本信息和操作 * *@authorsoyoungboy *@version1.0*/ private double number; //人民币的数 ...

最新文章

  1. DotNET企业架构应用实践-企业管理软件架构的历史与发展(中)- 分布式系统
  2. 通过 EXPLAIN 分析低效 SQL 的执行计划
  3. STM32F103 IAP升级时在app文件中放置标志字节处的地址计算
  4. OpenStack Gluon
  5. function里面可以写function吗_和田玉不戴的时候,可以长时间泡在水里面吗?
  6. Python爬取抖音app视频
  7. python selenium环境安装及配置_selenium环境配置
  8. 【vue开发问题-解决方法】(五)vue Element UI 日期选择器获取日期格式问题 t.getTime is not a function
  9. 什么是康奈尔笔记法?
  10. Linux ALSA DAPM 调试工具
  11. Bravo.Reporting:使用 .Net 实现基于 ODF 文档格式的报表系统
  12. 功能:批量查询和导出工艺路线
  13. c语言提取质心坐标,求图像质心的C语言实现
  14. GBK版本和UTF-8版本的区别
  15. 《第五项修炼——学习型组织的艺术与实务》读后感
  16. FastDFS分布式文件系统(详细入门级介绍)
  17. PLC通过伯努利方程近似计算水箱流量(FC)
  18. Control Group v2版本
  19. 微盟副总裁樊欣:洞见下一个风口
  20. MTK6737平台的GPIO驱动例程(一)

热门文章

  1. Foxmail怎么诊断邮件的状态
  2. QQ浏览器如何修改截屏快捷键?QQ浏览器修改截屏快捷键的方法
  3. 联想笔记本重装系统教程
  4. 如何优雅的实现一个靠谱的RTSP播放器?
  5. Idea进行远程Debug
  6. RedisTemplate常用集合使用说明-opsForValue(二)
  7. SpringAop与AspectJ的联系与区别____比较分析 Spring AOP 和 AspectJ 之间的差别
  8. springboot+shiro:ShiroConfiguration配置
  9. csdn博客markdown 如何输入上下标(如平方指数等)
  10. Vue页面跳转后不显示问题