对原有代码的优化,更简单易懂

java--人民币小写(金额)转为大写(金额转换)_CY_99的博客-CSDN博客_实数小写金额转大写pta

1,实现思路

因为汉语读法的特殊性把数字通过四位进行分割,因为千、百、十是重复使用的(壹百,壹百万,壹佰亿)。千、百、十我们看做四位中的小单位。亿和万看做四位结束后的大单位。分为两个单位数组。如下:

            //四位间隔的大单位String BigUnit[] = {"亿", "万", "元"};//四位之间的小单位String smallUnit[] = {"千", "百", "十", ""};//通过map来进行大小写转换。String[] upNum = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};

通过两层循环,外层控制大单位在数组中索引和按照四位分割的字符串截取。内层循环进行对四位之间的处理(包括汉字转换和单位拼接),如下:

for (int i = 0; i < length; i++) {//1.取大单位//2.字符串分割//3.处理四位之间数据 substrNum:分割后的字符串for (int j = 0; j < substrNum.length(); j++) {//汉字转换和单位拼接 TODO}//重置开始索引。indexS = indexE;
}

2.实现

有了思路,下面对具体的汉字转换和单位拼接进行实现。因为要控制0在不同位置的记录所以,要考虑全面。最后实现如下:

public static String dealMoney(String inputStr) {StringBuilder resultStrBuld = new StringBuilder();String[] split = inputStr.split("\\.");String intStr = split[0];//@@@@@@@@@@处理整数部分try {//四位间隔的大单位String BigUnit[] = {"亿", "万", "元"};//四位之间的小单位String smallUnit[] = {"千", "百", "十", ""};String[] upNum = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};if (intStr.matches("^[0]+$")) {//如果全是输入的 0 返回return "零元零分零角";} else {intStr = cutFrontZeros(intStr);}//按照四位进行处理进行转换,length是处理的次数int length = intStr.length() / 4;if ((intStr.length() % 4) > 0) {//有余数次数+1length++;}//获取截取的前索引int indexS = 0;int indexE = 0;//处理四位间隔数据for (int i = 0; i < length; i++) {//取大单位的索引int Bindex = 0;if (length < 3) {Bindex = i + (3 - length);} else {Bindex = i;}//分割索引if (i == 0 && ((intStr.length() % 4) > 0)) {indexE = intStr.length() % 4;} else {indexE = indexE + 4;}String substrNum = intStr.substring(indexS, indexE);//处理四位之间数据for (int j = 0; j < substrNum.length(); j++) {//判断截取字符串之后是否全是0boolean subStrAllzero = false;//substrNum后面全是0if (substrNum.substring(j, substrNum.length()).matches("^[0]+$")) {subStrAllzero = true;}//判断这一位是否是0boolean thisCharIs = false;if ("0".equals(String.valueOf(substrNum.charAt(j)))) {thisCharIs = true;} else {thisCharIs = false;}//取小单位索引int Sindex = 0;if (substrNum.length() != 4) {Sindex = Sindex + (4 - substrNum.length() + j);} else {Sindex = j;}/*拼接数字对应汉字如果后面全是0拼接单位,并结束循环(需要剔除0000这种情况)否则拼接大写汉字,如果上一位且这一位是零不拼接汉字*/if (subStrAllzero) {if (j != 0 || i == (length - 1)) {resultStrBuld.append(BigUnit[Bindex]);}break;} else { //if((!lastCharIs || !thisCharIs))if (resultStrBuld.toString().endsWith("零") && thisCharIs) {} else {resultStrBuld.append(upNum[Integer.parseInt(String.valueOf(substrNum.charAt(j)))]);}}/** 拼接单位*   如果是最后一位,拼接大单位*   否则拼接小单位*       如果上一位是零则不拼接单位,等非零情况拼接单位* */if ((j == (substrNum.length() - 1))) {resultStrBuld.append(BigUnit[Bindex]);} else {if (!resultStrBuld.toString().endsWith("零")) {resultStrBuld.append(smallUnit[Sindex]);}}}//重置字符串截取的开始索引。indexS = indexE;}//@@@@@@@@@@处理整数部分 END//@@@@@@@@@@处理小数部分if (split.length == 2) {String point = split[1];if (point.length() == 1) {resultStrBuld.append(upNum[Integer.parseInt(String.valueOf(point.charAt(0)))]).append("角").append("零分");} else {
resultStrBuld.append(upNum[Integer.parseInt(String.valueOf(point.charAt(0)))]).append("角").append(upNum[Integer.parseInt(String.valueOf(point.charAt(1)))]).append("分");}} else {resultStrBuld.append("整");}} catch (Exception e) {e.printStackTrace();return "null";}return resultStrBuld.toString();}

3.测试

我们进行验证一下。分别对101,10010,10100000,10000000001,100010000100,100.2,100001.02,01.62进行输出测试。对输入数据进行了限制,最大支持12位整数,两位小数。

        if (num.matches("^[0-9]{0,12}|[0-9]{0,12}+([.]{1}[0-9]{1,2})$")) {System.out.println(dealMoney(num));} else {System.out.println("请检查金额(整数位不能超过12位,小数不能超过2位)");}

测试结果:

101:壹百零壹元整
10010:壹万零壹十元整
10100000:壹千零壹十万元整
10000000001:壹百亿零壹元整
100010000100:壹千亿壹千万零壹百元整
100.2:壹百元贰角零分
100001.02:壹十万零壹元零角贰分
01.62:壹元陆角贰分

:如果大家测试有问题,可以评论留言。别忘了收藏哦~


版权归属作者(CY_99),未经许可,严禁转载!

——2023-02-06

java人民币数字转大写汉字(小写转为大写).java相关推荐

  1. php 将数字转为大写,将数字小写转为大写 php

    将数字小写转为大写,这原来是一个类,我改写为一个函数.修复和增加了其中一些在实际工作中需要的功能.使其更加全面.100%可用. function change_num($num) { $d = arr ...

  2. 从键盘输入一字符串,以#为结束标志 将大写转为小写小写转为大写 其他不变输出转化后的字符串

    int main()//7  从键盘输入一字符串,以#为结束标志 将大写转为小写小写转为大写 其他不变输出转化后的字符串 {     char x,y;     scanf("%c" ...

  3. JAVA 人民币数字模式与中文繁体模式的转换(小白专用)!

    金额转为大写形式 要求如下: 给定一个浮点数,将其转换为金额的中文大写形式的字符串.例如,123.45表示为"壹佰贰拾叁元肆角伍分".注意以下几种情况: A.当金额为整数时,只表示 ...

  4. mysql大写和小写_MySQL大写和小写问题

    近期在将一个windows的mysql数据库转到linux上时,碰到表找不到问题,详细分析了下后发现原来是大写和小写问题. ? 在 MySQL 中,数据库和表对就于那些文件夹下的文件夹和文件. 因而, ...

  5. java输入数字金额输出汉字大写_JS-输入数字输出大写中文

    function(n) { var fraction = ['角', '分']; var digit = [ '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', ...

  6. 数字的ASCII码值转为大写字母

    大写字母.小写字母及数字的ASCII码(数字)值对照: a-z:97-122 A-Z:65-90 0-9:48-57 语法: String.fromCharCode(num1, ..., numN) ...

  7. java实现数字转中文汉字序号

    将数字转为汉字,符合常用语言习惯,支持四位以下 public static String num2Chinese(int section) {if (section >= 10 &&am ...

  8. java键盘输入怎么输入汉字,图文教你java怎么接收从键盘输入的字符串

    电脑现已成为我们工作.生活和娱乐必不可少的工具了,在使用电脑的过程中,可能会遇到java怎么接收从键盘输入的字符串的问题,如果我们遇到了java怎么接收从键盘输入的字符串的情况,该怎么处理怎么才能解决 ...

  9. 在java编程中会使用汉字字符_在java程序中将中文字符写入文件中或者是将文件中的中文字符读入程序时会出现乱码或者一串“?”,求...

    /** 现在不用qq了. */ /** * 写出文件 * @param content * @param fileName * @param charsetName */ public  void w ...

最新文章

  1. 学习资源:在线学习 Python(一)
  2. Android 监听ScrollView的滑动
  3. 关于docker的存储驱动
  4. 简单显示分配器的实现
  5. Python中的匿名函数和函数式编程
  6. Knowledge Graph Alignment Network with Gated Multi-Hop Neighborhood Aggregation-学习笔记
  7. 孙叫兽进阶之路之软件开发生命周期
  8. 转载:使用 Frida 来 hook 加固的 Android 应用的 java 层
  9. 两个sql交集_sql的高级命令运用
  10. 数据中台赋能企业数字化转型的四个关键成功因素
  11. python中search用法_Python3中正则模块re.compile、re.match及re.search函数用法详解
  12. Html前端基础(这些基础标签你必须知道!)
  13. C# 中base和this关键字
  14. 汉化后的eclipse改成英文版
  15. 【好看图标不用愁】吾爱万能软件ICO图标提取器
  16. 手把手带你使用Paint in 3D和Photon撸一个在线涂鸦画板
  17. Startssl 现在就启用 HTTPS,免费的!
  18. css之@media网页适配
  19. 时间序列之holt-winters(三次指数平滑)
  20. excel设置斑马线

热门文章

  1. go mysql连接_使用 Go 连接数据库
  2. 经验:从ppt复制到word中的图片在导出成PDF后出现黑框怎么解决
  3. string类型转bool类型_Go 类型的 String() 方法和格式化描述符
  4. vue 导入图片方法(简单易用)
  5. halcon 深度学习标注_Halcon deep learning之目标检测笔记(一)
  6. cesium创建点、立方体,广告牌
  7. 计算机技术与园林,计算机技术在园林设计的应用
  8. 原生php ajax post_使用原生ajax发送post请求完整案例
  9. 记忆翻牌游戏代码html,原生JS实现记忆翻牌游戏
  10. linux下使用sed修改hosts表