根据人民币大写规则写的java工具类
需求场景:传入一个数字,把它转成人民币大写。
先看下人民币大写规则:
一、人民币大写金额数字到“元”为止的.在“元”之后.应写“整”(或“正”)字.在“角”之后.可以不写“整”(或“正”)字.大写金额数字有“分”的.“分”后面不写“整”(或“正”)字。
二、人民币大写金额数字前应标明“人民币”字样.大写金额数字有“分”的.“分”后面不写“整”(或“正”)字.
三、人民币大写金额数字前应标明“人民币”字样.大写金额数字应紧接“人民币”字样填写.不得留有空白.大写金额数字前未印“人民币”字样的.应加填“人民币”三字.在票据和结算凭证大写金额栏内不得预印固定的“仟.佰.拾.万.仟.佰.拾.元.角.分”字样。
四、阿拉伯数字小写金额数字中有“0”时.人民币大写应按照汉语语言规律.金额数字构成和防止涂改的要求进行书写.举例如下:
1. 阿拉伯金额数字中间有“0”时.人民币大写要写“零”字.如¥1409.50.应写成人民币陆壹仟肆佰零玖元伍角。
2. 阿拉伯金额数字中间连续有几个“0”时.人民币大写金额中间可以只写一个“零”字.如¥6007.14.应写成人民币陆仟零柒元壹角肆分.
3. 阿拉伯金额数字万位和元位是“0”.或者数字中间连续有几个“0”.万位.元位也是“0”.但千位.角位不是“0”时.中文大写金额中可以只写一个零字.也可以不写“零”字.如¥1680.32.应写成人民币壹仟陆佰捌拾元零叁角贰分.或者写成人民币壹仟陆佰捌拾元叁角贰分.又如¥107000.53.应写成人民币壹拾万柒仟元零伍角叁分.或者写成人民币壹拾万零柒仟元伍角叁分。
4. 阿拉伯金额数字角位是“0”.而分位不是“0”时.中文大写金额“元”后面应写“零”字.如¥16409.02.应写成人民币壹万陆仟肆佰零玖元零贰分,又如¥325.04.应写成人民币叁佰贰拾伍元零肆分。
再介绍下面我写的工具类,我写的这个类就一个方法toUpper(String s),入参的整数部分不能超过16位数,返回参数是转换后的大写。总体而言就是一个String根据一定的规则转成另一个String。逻辑就不说了,直接看代码:
package com.syz.rmb;import java.util.Arrays;public class RmbUtil {private static String reg = "[0-9]*\\.?[0-9]{0,2}";private static String[] digit = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒","捌", "玖" };private static String[] iunit = { "元", "万", "亿", "万亿" };// 整数部分单位private static String[] dunit = { "角", "分" };// 小数部分单位private static String[] funit = { "", "拾", "佰", "仟" };// 四进制单位public static void main(String[] args) {String[] ary = { "00010001001.01", "005420101020000000.06", "00.70",".00", "1200", "1409.50", "6007.14", "1680.32", "107000.53","16409.02", "325.00", "325.0", "1.", ".3", "." };for (String s : ary) {String r = toUpper(s);System.out.println(r);}}public static String toUpper(String s) {if (!s.matches(reg)) {throw new RuntimeException("参数不合法" + s);}// 在所有前面加0,防止出现split的第一个元素为空的情况,在后面会去掉这个零s = "0" + s;String[] ary = s.split("\\.");// 打印一下将要处理的数据System.out.println(Arrays.toString(ary));String left = "";String right = "";if (ary.length == 1) {// 只有整数left = ary[0];}else {// 有小数left = ary[0];right = ary[1];}String leftUpper = "";String rightUpper = "";// 除去左边的0left = left.replaceAll("^0*", "");if (left.length() > 16) {throw new RuntimeException("最高支持万亿级别");}if (!left.equals("")) {int llen = left.length();int j = 0;int k = 0;boolean flag = true;for (int i = llen - 1; i >= 0; i--) {if (j == 0) {leftUpper = iunit[k] + leftUpper;}if (left.charAt(i) == 48) {if (flag) {}else {leftUpper = digit[left.charAt(i) - 48] + leftUpper;flag = true;}}else {leftUpper = digit[left.charAt(i) - 48] + funit[j]+ leftUpper;flag = false;}if (j == 3) {j = 0;k++;flag = true;}else {j++;}}}if (!right.equals("")) {boolean rflag = false;if (right.length() == 2) {if (right.charAt(1) > 48) {rightUpper = digit[right.charAt(1) - 48] + dunit[1]+ rightUpper;rflag = true;}}if (right.charAt(0) == 48) {if (rflag) {rightUpper = digit[right.charAt(0) - 48] + rightUpper;}}else {rightUpper = digit[right.charAt(0) - 48] + dunit[0]+ rightUpper;}}if (leftUpper.equals("") && rightUpper.equals("")) {return "零元";}if (rightUpper.equals("")) {rightUpper = "整";}return leftUpper + rightUpper;}}
控制台打印结果:
[000010001001, 01]
壹仟万壹仟零壹元零壹分
[0005420101020000000, 06]
伍仟肆佰贰拾万亿壹仟零壹拾亿贰仟万元零陆分
[000, 70]
柒角
[0, 00]
零元
[01200]
壹仟贰佰元整
[01409, 50]
壹仟肆佰零玖元伍角
[06007, 14]
陆仟零柒元壹角肆分
[01680, 32]
壹仟陆佰捌拾元叁角贰分
[0107000, 53]
壹拾万柒仟元伍角叁分
[016409, 02]
壹万陆仟肆佰零玖元零贰分
[0325, 00]
叁佰贰拾伍元整
[0325, 0]
叁佰贰拾伍元整
[01]
壹元整
[0, 3]
叁角
[0]
零元
根据人民币大写规则写的java工具类相关推荐
- java工具类怎么写_常用的Java工具类——十六种
常用的Java工具类--十六种 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选 ...
- 干货:排名前 16 的 Java 工具类!
2019独角兽企业重金招聘Python工程师标准>>> 干货:排名前 16 的 Java 工具类! 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最 ...
- 排名前 16 的 Java 工具类
转载来自微信公众号:Java 技术栈.如有侵权,请联系作者删除!! 在 Java 中,工具类定义了一组公共方法,这篇文章将介绍 Java 中使用最频繁及最通用的 Java 工具类.以下工具类.方法按使 ...
- beanutils工具类_16 个超级实用的 Java 工具类!
在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码. 一. ...
- java轻量级并行工具类_16 个超级实用的 Java 工具类
原标题:16 个超级实用的 Java 工具类 源 /juejin 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名, ...
- java 文本工具类_干货:排名前16的Java工具类
原标题:干货:排名前16的Java工具类 作者丨Java技术栈 https://www.jianshu.com/p/9e937d178203 在Java中,工具类定义了一组公共方法,这篇文章将介绍Ja ...
- 干货:排名前16的Java工具类
image 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源 ...
- 排名前16的Java工具类
原文:https://www.jianshu.com/p/9e937d178203 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法 ...
- java xml最火的的工具_几种高效的Java工具类推荐
本文将介绍了十二种常用的.高效的Java工具类 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类. 在开发中,使用这些工具类,不仅可以提高编码效率,还 ...
最新文章
- phalapi-进阶篇4(notrom进阶以及事务操作)
- python读取大文件-Python如何读取、拆分大文件
- 任意进制转换的递归实现
- 10个理由告诉你为何要学Java编程?
- http协议的各类状态码
- Oracle体系结构之控制文件的多路复用技术
- mysql 主键个数
- 大数据平台基本功能有哪些
- MSB与LSB的含义
- Alcor(安国)AU6387量产修复(u盘修复)
- 一个关于数学归纳法的悖论问题
- php 字典树,关于PHP字典树的定义与实现方法
- 计算机软件考试——嵌入式系统设计师 知识点汇总
- EBS R12.2 ADOP (R12.2 AD Online Patching) - 3
- Vim学习笔记一:Vim对文本操作
- Android使用VideoView播放视频
- WebApp开发中的rem.js
- 每日一个小技巧:文字转图片怎么操作?介绍给你三款软件
- java.sql.SQLException: 无效的列类型: 1111 报错问题解决
- 【算法】超详细的遗传算法(Genetic Algorithm)解析