动机

业务系统开发的报表中经常需要将人民币数值转换为大写,所以江苏南大先腾java研发框架中写了一个通用的大写转换函数。由于报表的数值一般比较大所以在java开发中不建议使用float或者int类型,请用BigDecimal类型,为了更加方便调用函数的参数使用字符串类型。

源码

    final static private String CNum[]={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};final static private String CNum2[]={"〇","一","二","三","四","五","六","七","八","九"};final static private String CBit[]={"","拾","佰","仟"};//拾佰仟万拾佰仟亿拾佰仟萬/** 将数值大写*/public static String capitalization(String szNum){StringBuilder resstr = new StringBuilder();String tmpstr = szNum.trim();int sl = tmpstr.length();int sp=0;int dotpos = tmpstr.indexOf('.');if(dotpos != -1){while(sl>1 && tmpstr.charAt(sl-1) == '0') sl--;if(tmpstr.charAt(sl-1)=='.') sl--;if(sl != tmpstr.length()){tmpstr = tmpstr.substring(0,sl);}}else dotpos = sl;if(sl<1) return CNum[0];if(tmpstr.charAt(0) == '-'){resstr.append("负");sp = 1;}String integerNum = tmpstr.substring(sp,dotpos-sp);String decimalNum ="";if(dotpos+1<sl) decimalNum = tmpstr.substring(dotpos+1);sl = integerNum.length();sp=0; while(sp<sl && integerNum.charAt(sp)=='0') sp++;if(sp > 0) integerNum = integerNum.substring(sp);int inl = integerNum.length();if(inl>0){int h = (inl-1) % 4 ;int j = (inl-1) / 4 + 1;sp=0;boolean allzero = false;boolean preallzero = false;for(;j>0;j--){int k=h;h = 3;boolean preiszero = allzero;allzero = true;for(;k>=0;k--,sp++){if(integerNum.charAt(sp) == '0')preiszero = true;else{allzero = false;if(preiszero)resstr.append("零");preiszero = false;resstr.append(CNum[(byte) (integerNum.charAt(sp)) - 48]).append(CBit[k]);}}// end for kif(/*j!=0 &&*/ j % 2 == 0 ){if(!allzero)resstr.append("万");}else{if(!allzero || !preallzero){int repyi = j/2;for(int i=0; i<repyi; i++)resstr.append("亿");}}preallzero = allzero;}//end for j}elseresstr.append("零");int dnl = decimalNum.length();if(dnl>0){resstr.append("点");for(int i=0; i<dnl; i++){resstr.append(CNum[(byte)(decimalNum.charAt(i))-48]);}}return resstr.toString();}/** 仅仅是把 0~9 转换为 "〇","一","二","三","四","五","六","七","八","九"*/public static String uppercaseCN(String szNum){StringBuilder resstr = new StringBuilder();String tmpstr = szNum.trim();int sl = tmpstr.length();int sp=0;if(sl<1) return CNum2[0];for(;sp<sl;sp++)if(tmpstr.charAt(sp)>='0' && tmpstr.charAt(sp)<='9')resstr.append(CNum2[tmpstr.charAt(sp)-'0']);elseresstr.append(tmpstr.charAt(sp));return resstr.toString();}public static String capitalization(String szNum,final boolean isSimple){if (isSimple){return uppercaseCN(szNum);}return capitalization(szNum);}

完整代码参见NumberBaseOpt 更多先腾框架项目参见先腾开源计划。

测试程序

public static String rmbDX(String f){return NumberBaseOpt.capitalization((f.indexOf('.')>=0? f.substring(0,f.indexOf('.')):f)) + "元"+ NumberBaseOpt.capitalization(String.valueOf(NumberBaseOpt.getNumByte(f,-1)))+"角"+ NumberBaseOpt.capitalization(String.valueOf(NumberBaseOpt.getNumByte(f,-2)))+"分";}public static void main(String[] args) {System.out.println(rmbDX("123.45"));System.out.println(rmbDX("3456700000000089123.45"));}

运行结果:

壹佰贰拾叁元肆角伍分
叁佰肆拾伍亿亿陆仟柒佰万亿零捌万玖仟壹佰贰拾叁元肆角伍分

人民币数字大写转换 java实现 [附源码]相关推荐

  1. 基于FPGA数字时钟的设计(附源码)

    大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分.大侠可以关注"FPGA技术江湖"微信公众号,在"闯荡江湖"."行侠仗义"栏里获取其 ...

  2. 用树型模型管理App数字和红点提示(附源码Demo)

    我们平常接触到的大部分App,在收到新消息的时候一般都会以数字或红点的形式提示出来.比如在微信当中,当某位好友给我们发来新的聊天消息的时候,在相应的会话上就会有一个数字来表示未读消息的数目:再比如当微 ...

  3. 从零接入微信公众号(Java实现 附源码)

    目录 从零接入微信公众号 一.微信测试号的申请与关注 1.申请 2.访问域名配置 3.关注 二.测试号快速生成底部导航栏 1.获取 access_token 2.自定义菜单 三.微信公众号网页授权 1 ...

  4. 利用百度语音识别技术实现文字转语音的应用(Java版附源码)

    @throws IOException @throws DemoException */ public static String getResponseString(HttpURLConnectio ...

  5. 人民币数字大小写转换

    人民币数字大写转换 include <iostream> include <iostream> include <string> include <stdli ...

  6. 【毕设|Java项目开发合集】(附源码)

    [毕设|Java项目开发合集] 14个Java项目(附源码)助你轻松搞定毕业设计! 1.新冠疫情统计系统 2.家教系统 3.进销存管理系统 4.饮食分享平台 5.宠物领养平台 6.销售评价系统 7.酒 ...

  7. 4个数字计算24点java算法(附源码)

    今天看到一个帖子说程序员面试考24点算法,想为什么不用程序来实现呢.在网上没有找到非常完美的算法,包括那个24点计算器,给出的结果重复的也较多.所以自己写了一个.在这儿贴出来给大家分享一下.附源码. ...

  8. java中batch基础_详解Spring batch 入门学习教程(附源码)

    详解Spring batch 入门学习教程(附源码) 发布时间:2020-09-08 00:28:40 来源:脚本之家 阅读:99 作者:achuo Spring batch 是一个开源的批处理框架. ...

  9. java qq聊天界面_【附源码】用Java写了一个类QQ界面聊天小项目,可在线聊天!...

    原标题:[附源码]用Java写了一个类QQ界面聊天小项目,可在线聊天! 目录: 1.功能实现 2.模块划分 3.使用到知识 4.部分代码实现 5.运行例图 1.功能实现 1.修改功能(密码.昵称.个性 ...

最新文章

  1. mysql常用的函数
  2. 提高你的Java代码质量吧:如果有必要,使用变长数组吧
  3. AGG第二十课 agg::ellipse 方法approximation_scale()
  4. appium+python自动化57-chromedriver与chrome版本
  5. 序列化与反序列化注意事项 java
  6. BiquadFilterNode
  7. 什么服务器有信号枪,绝地求生刺激战场8个必刷信号枪的时段地点
  8. ecs服务器配置git_ecs安装git
  9. 基于SpringCloud Alibaba实现的论坛
  10. 瑞昱网通芯片RTL8305NB-CG应用介绍
  11. Ubuntu安装和显卡驱动安装
  12. 【Android Studio】ImageView / ImageButton 图片太大或者太小解决方法
  13. 每个计算机的ip地址要一样吗,同一ip网站-局域网中的所有电脑都是同一个IP地址吗? – 手机爱问...
  14. 在50户人家的狗中寻找病狗数量的趣味题目(详细解释)
  15. php实现emoji表情包的数据库存储和展示
  16. MFRC522应用详解
  17. 微信 商店服务器,对比saas小程序,云开发,微信小商店
  18. 系统重装计算机硬件不兼容,小白一键重装系统说电脑出现本机不支持怎么办
  19. 计算机应用于软件等待预审,1系统架构-计算机应用与软件.doc
  20. 申宝股票-题材股分化

热门文章

  1. C++Qt开发——Mode View(模型视图)
  2. CRM系统排名?CRM客户管理系统怎么选?
  3. java stopwatch_Java计时新姿势StopWatch详解
  4. 为MDaemon设置DMRAC验证
  5. 全球反洗钱监管机构加大加密货币反洗钱监管力度
  6. 百度传课 amazeUI 按钮交互 作业
  7. append和appendTo的区别浅析
  8. STC16f40k128——PWM
  9. u盘数据损坏怎么恢复?
  10. 解决vue项目过大导致的内存频繁溢出