人民币数字大写转换 java实现 [附源码]
动机
业务系统开发的报表中经常需要将人民币数值转换为大写,所以江苏南大先腾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实现 [附源码]相关推荐
- 基于FPGA数字时钟的设计(附源码)
大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分.大侠可以关注"FPGA技术江湖"微信公众号,在"闯荡江湖"."行侠仗义"栏里获取其 ...
- 用树型模型管理App数字和红点提示(附源码Demo)
我们平常接触到的大部分App,在收到新消息的时候一般都会以数字或红点的形式提示出来.比如在微信当中,当某位好友给我们发来新的聊天消息的时候,在相应的会话上就会有一个数字来表示未读消息的数目:再比如当微 ...
- 从零接入微信公众号(Java实现 附源码)
目录 从零接入微信公众号 一.微信测试号的申请与关注 1.申请 2.访问域名配置 3.关注 二.测试号快速生成底部导航栏 1.获取 access_token 2.自定义菜单 三.微信公众号网页授权 1 ...
- 利用百度语音识别技术实现文字转语音的应用(Java版附源码)
@throws IOException @throws DemoException */ public static String getResponseString(HttpURLConnectio ...
- 人民币数字大小写转换
人民币数字大写转换 include <iostream> include <iostream> include <string> include <stdli ...
- 【毕设|Java项目开发合集】(附源码)
[毕设|Java项目开发合集] 14个Java项目(附源码)助你轻松搞定毕业设计! 1.新冠疫情统计系统 2.家教系统 3.进销存管理系统 4.饮食分享平台 5.宠物领养平台 6.销售评价系统 7.酒 ...
- 4个数字计算24点java算法(附源码)
今天看到一个帖子说程序员面试考24点算法,想为什么不用程序来实现呢.在网上没有找到非常完美的算法,包括那个24点计算器,给出的结果重复的也较多.所以自己写了一个.在这儿贴出来给大家分享一下.附源码. ...
- java中batch基础_详解Spring batch 入门学习教程(附源码)
详解Spring batch 入门学习教程(附源码) 发布时间:2020-09-08 00:28:40 来源:脚本之家 阅读:99 作者:achuo Spring batch 是一个开源的批处理框架. ...
- java qq聊天界面_【附源码】用Java写了一个类QQ界面聊天小项目,可在线聊天!...
原标题:[附源码]用Java写了一个类QQ界面聊天小项目,可在线聊天! 目录: 1.功能实现 2.模块划分 3.使用到知识 4.部分代码实现 5.运行例图 1.功能实现 1.修改功能(密码.昵称.个性 ...
最新文章
- mysql常用的函数
- 提高你的Java代码质量吧:如果有必要,使用变长数组吧
- AGG第二十课 agg::ellipse 方法approximation_scale()
- appium+python自动化57-chromedriver与chrome版本
- 序列化与反序列化注意事项 java
- BiquadFilterNode
- 什么服务器有信号枪,绝地求生刺激战场8个必刷信号枪的时段地点
- ecs服务器配置git_ecs安装git
- 基于SpringCloud Alibaba实现的论坛
- 瑞昱网通芯片RTL8305NB-CG应用介绍
- Ubuntu安装和显卡驱动安装
- 【Android Studio】ImageView / ImageButton 图片太大或者太小解决方法
- 每个计算机的ip地址要一样吗,同一ip网站-局域网中的所有电脑都是同一个IP地址吗? – 手机爱问...
- 在50户人家的狗中寻找病狗数量的趣味题目(详细解释)
- php实现emoji表情包的数据库存储和展示
- MFRC522应用详解
- 微信 商店服务器,对比saas小程序,云开发,微信小商店
- 系统重装计算机硬件不兼容,小白一键重装系统说电脑出现本机不支持怎么办
- 计算机应用于软件等待预审,1系统架构-计算机应用与软件.doc
- 申宝股票-题材股分化