java人民币读法转换

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

将浮点数转换成人民币读法字符串,
例如: 将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)));}}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/564865.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

博弈论 —— matlab

目录 1.简介 2.算法原理 3.实例分析 1.各参数初始化 2.计算期望与实际期望 3.博弈过程 4.绘图 完整代码 1.简介 博弈论又被称为对策论(Game Theory)既是现代数学的一个新分支&#xff0c;也是运筹学的一个重要学科。 博弈论主要研究公式化了的激励结构间的相互作用。是研…

电脑有回声_电脑连接麦克风有回音怎么办?麦克风回声的解决方法

电脑插入麦克风后说话有回声怎么办&#xff1f;麦克风说话有回音该如何解决&#xff1f;下面给大家介绍电脑连接麦克风有回音的解决方法。解决方法&#xff1a;1、打开【控制面板】&#xff0c;找到并点击【硬件和声音】&#xff0c;如图所示&#xff1a;2、在【硬件和声音】窗…

线性规划 —— matlab

目录 一、基本概念 二、概念的数学形式表达 三、确定w和b 1.读取或输入数据 2.归一化、标准化 2.1 均值 2.2 归一化 2.3 标准化 3.求解w和b 1.直接解方程 2.最小二乘法&#xff08;least square method&#xff09;求解&#xff1a; 4. 评估回归模型 四、regress线…

Java商品信息查询

使用一维数组和二维数组的相关知识&#xff0c;以及数组排序的多种算法来实现商品信息查询的功能。 假设在仓库系统中&#xff0c;每件商品都有 3 个库存信息&#xff0c;分别是入库量、出库量和当前库存量。定义一个一维数组来存储 5 件商品的名称&#xff0c;并定义一个二维…

openwrt dhcp 无法获取ip_电脑的 ip 是怎么来的呢?我又没有配置过

来源 | 苦逼的码农作者 | 帅地对于我们平时上网的电脑的 ip 是如何来的呢&#xff1f;一种简单的方法就是我们自己来配置了显然&#xff0c;这里有两种配置方式&#xff0c;一种是自动获取 ip 地址&#xff0c;一种是我们手动来设置&#xff0c;我相信大部分人都是通过自动获取…

线性回归 —— python

目录 一、基本概念 二、概念的数学形式表达 三、确定w和b 1.读取或输入数据 2.归一化、标准化 2.1 均值 2.2 归一化 2.3 标准化 3.求解w和b 1.直接解方程 2.最小二乘法&#xff08;least square method&#xff09;求解&#xff1a; 4. 评估回归模型 四、sklearn中…

审查元素找不到创建的元素_香奈儿除了珍珠,还有哪些你不知道的经典元素?答案在原文中找...

Chanel曾经说过&#xff1a;“没有珍珠的女人&#xff0c;不算是女人”珍珠是Coco永远的标志无论白天还是夜晚也无论她穿着运动服还是毛衣男装裤甚至在她人生最后的一段日子珍珠饰品都如影随形。BUT&#xff01;你能相信&#xff1f;对珍珠如此看重的Coco竟然卖的大部分珍珠是人…

博弈论 —— python

目录 1.简介 2.算法原理 3.实例分析 1.各参数初始化 2.计算期望与实际期望 3.博弈过程 4.绘图 完整代码 1.简介 博弈论又被称为对策论(Game Theory)既是现代数学的一个新分支&#xff0c;也是运筹学的一个重要学科。 博弈论主要研究公式化了的激励结构间的相互作用。是研…

android应用程序 多少钱_关于APP开发你最想了解的事,开发一个APP多少钱?

当我们在进行APP开发&#xff0c;最关注的问题一定是APP开发的价格问题&#xff0c;而作为软件开发行业的从业人员&#xff0c;经常会遇到这样的情况&#xff1a;“别说这么多&#xff0c;你只要告诉我开发一个软件多少钱就行了”。郑州APP开发公司的确&#xff0c;无论我们买什…

mvc 扫描二维码跳转内部指定页面_开源神器:一个二维码,让文件传输不设限!...

大家好&#xff0c;我是小 G。今天给大家推荐一个在前不久火遍 GitHub 的开源项目&#xff1a;QRCP。从项目的命名你们应该就能大致猜测出来&#xff0c;这款神器的主要作用&#xff0c;就是能通过指定二维码&#xff0c;快速完成文件的传输功能。项目作者是来自意大利的一位小…

K-means聚类 —— matlab

目录 1.简介 2.算法原理 3.实例分析 3.1 读取数据 3.2 原理推导K均值过程 3.3 自带kmeans函数求解过程 完整代码 1.简介 聚类是一个将数据集中在某些方面相似的数据成员进行分类组织的过程&#xff0c;聚类就是一种发现这种内在结构的技术&#xff0c;聚类技术经常被称为…

数据线给电脑联网是什么原理_物联网孵化的产物——条码扫描器

一、什么是物联网&#xff1f;物联网的概念由凯文阿什顿(Kevin Ashton)于1999年被提出&#xff0c;即Internet of Things(IOT)&#xff0c;也称为Web of Things。根据阿什顿的想法&#xff0c;计算机最终能够在没有人工干预的情况下&#xff0c;自主产生及收集数据&#xff0c;…

灰色关联法 —— matlab

目录 1.简介 2.算法详解 2.1 数据标准化 2.2 计算灰色相关系数 2.3 计算灰色关联度系数 3.实例分析 3.1 读取数据 3.2 数据标准化 3.3 绘制 x1,x4,x5,x6,x7 的折线图 3.4 计算灰色相关系数 完整代码 1.简介 对于两个系统之间的因素&#xff0c;其随时间或不同对象而…

灰色关联与TOPSIS法 —— matlab

目录 1.简介 2.算法详解 2.1 指标正向化及标准化 2.2 找到最大最小参考向量 2.3 计算与参考向量的相关系数 2.4 求评分 3.实例分析 3.1 读取数据 3.2 数据标准化 3.3 得到最大最小参考行 3.4 与最大值的灰色相关系数 3.5 与最小值的灰色相关系数 3.6 计算综合评分 …

mmap函数_Linux内存映射mmap原理分析

一直都对内存映射文件这个概念很模糊&#xff0c;不知道它和虚拟内存有什么区别&#xff0c;而且映射这个词也很让人迷茫&#xff0c;今天终于搞清楚了。。。下面&#xff0c;我先解释一下我对映射这个词的理解&#xff0c;再区分一下几个容易混淆的概念&#xff0c;之后&#…

灰色关联法 —— python

目录 1.简介 2.算法详解 2.1 数据标准化 2.2 计算灰色相关系数 2.3 计算灰色关联度系数 3.实例分析 3.1 读取数据 3.2 数据标准化 3.3 绘制 x1,x4,x5,x6,x7 的折线图 3.4 计算灰色相关系数 完整代码 1.简介 对于两个系统之间的因素&#xff0c;其随时间或不同对象而变…

arraylist线程安全吗_Java中的集合和线程安全

通过Java指南我们知道Java集合框架(Collection Framework)如何为并发服务&#xff0c;我们应该如何在单线程和多线程中使用集合(Collection)。话题有点高端&#xff0c;我们不是很好理解。所以&#xff0c;我会尽可能的描述的简单点。通过这篇指南&#xff0c;你将会对Java集合…

灰色关联与TOPSIS法 —— python

目录 1.简介 2.算法详解 2.1 指标正向化及标准化 2.2 找到最大最小参考向量 2.3 计算与参考向量的相关系数 2.4 求评分 3.实例分析 3.1 读取数据 3.2 数据标准化 3.3 得到最大最小参考行 3.4 与最大值的灰色相关系数 3.5 与最小值的灰色相关系数 3.6 计算综合评分…

spark 数据框 删除列_pandas 常用的数据处理函数

在数据分析过程中&#xff0c;首先就是对数据进行清洗和处理&#xff0c;而使用 python 进行处理的朋友们&#xff0c;对 pandas 包肯定是熟悉不过的了。pandas 的功能很强大&#xff0c;基本的数据处理操作都可以找到对应函数去使用&#xff0c;想全面了解的朋友可以查看相关文…

Java元注解作用及使用

元注解是负责对其它注解进行说明的注解&#xff0c;自定义注解时可以使用元注解。Java 5 定义了 4 个注解&#xff0c;分别是 Documented、Target、Retention 和 Inherited。Java 8 又增加了 Repeatable 和 Native 两个注解。这些注解都可以在 java.lang.annotation 包中找到。…