java 数字大小写转换工具类--适用于打印收据
本工具类主要实现数字double1000.00====>>零万壹仟零佰零拾零元零角零分,注释很详细,就不多做介绍了
/*** 不考虑分隔符的正确性*/private static final Pattern AMOUNT_PATTERN = Pattern.compile("^(0|[1-9]\\d{0,11})\\.(\\d\\d)$");private static final char[] RMB_NUMS = "零壹贰叁肆伍陆柒捌玖".toCharArray();private static final String[] UNITS = {"元", "角", "分"};private static final String[] U1 = {"", "拾", "佰", "仟"};private static final String[] U2 = {"", "万", "亿"};/*** 将金额(整数部分等于或少于12位,小数部分2位)转换为中文大写形式.** @param money 金额数字* @return 中文大写*/public static String convert(Double money) {money = Math.abs(money);if (Double.valueOf(0).equals(money)) {return "零元";}String amount = moneyFormat(money);// 去掉分隔符amount = amount.replace(",", "");// 验证金额正确性Matcher matcher = AMOUNT_PATTERN.matcher(amount);if (!matcher.find()) {}// 整数部分String integer = matcher.group(1);int i=Integer.valueOf(integer);// 小数部分String fraction = matcher.group(2);String result = "";result += integer2rmb(integer) + UNITS[0];// 小数部分result += fraction2rmb(fraction);return result;}/*** 将金额小数部分转换为中文大写*/private static String fraction2rmb(String fraction) {// 角char jiao = fraction.charAt(0);// 分char fen = fraction.charAt(1);return (RMB_NUMS[jiao - '0'] + (jiao >= '0' ? UNITS[1] : "")) + (fen >= '0' ? RMB_NUMS[fen - '0'] + UNITS[2] : "");}/*** 将金额整数部分转换为中文大写** @param integer* @return*/private static String integer2rmb(String integer) {String integer1=integer;StringBuilder buffer = new StringBuilder();// 从个位数开始转换,因我所用收据单最多到万字段,所以最长长度为5if (integer.length()<2&&integer.length()>0){integer1="0"+"0"+"0"+"0"+integer;}else if (integer.length()<3&&integer.length()>1){integer1="0"+"0"+"0"+integer;}else if (integer.length()<4&&integer.length()>2){integer1="0"+"0"+integer;}else if (integer.length()<5&&integer.length()>3){integer1="0"+integer;}int i, j;for (i =integer1.length()-1, j = 0; i >= 0; i--, j++) {char n = integer1.charAt(i);if (n==48){//此处是万位为0,执行下列操作// 插入[万]或者[亿]buffer.append(U2[j / 4]);// 插入[拾]、[佰]或[仟]buffer.append(U1[j % 4]);}else {// 插入[万]或者[亿]buffer.append(U2[j / 4]);// 插入[拾]、[佰]或[仟]buffer.append(U1[j % 4]);}buffer.append(RMB_NUMS[n - '0']);}return buffer.reverse().toString();}/*** 对金额的格式调整到分** @param preMoney* @return*/public static String moneyFormat(Double preMoney) {//23->23.00String money = preMoney.toString();StringBuffer sb = new StringBuffer();if (money == null) {return "0.00";}int index = money.indexOf(".");if (index == -1) {return money + ".00";} else {//整数部分String s0 = money.substring(0, index);//小数部分String s1 = money.substring(index + 1);if (s1.length() == 1) {//小数点后一位s1 = s1 + "0";} else if (s1.length() > 2) {//如果超过3位小数,截取2位就可以了s1 = s1.substring(0, 2);}sb.append(s0);sb.append(".");sb.append(s1);}return sb.toString();}
下图是测试情况
结果:
该工具类借鉴了csdn用户君子志邦的【JAVA工具类】金额与汉字大小写的转换 金额转换,在其原有功能之上做出了部分调整,若有问题,请联系本人删除,谢谢理解
以下是原文出处:
https://blog.csdn.net/u011488009/article/details/89966655
java 数字大小写转换工具类--适用于打印收据相关推荐
- Java 数字转汉字工具类
Java 数字转汉字工具类 一.工具类--NumberToCnUtil package com.example.demotest.util;import java.util.Arrays; impor ...
- 金额大小写转换工具类
/***金额大小写转换工具类*/public class MoneyUtil {/** 大写数字 */private static final String[] NUMBERS = { "零 ...
- 分享万能java字符串编码转换工具类
代码下载地址:http://www.zuidaima.com/share/1795356301560832.htm 原文:分享万能java字符串编码转换工具类 package com.zuidaima ...
- Java 字体颜色转换工具类 ColorUtil
import java.awt.Color; import jxl.format.Colour; /** *字体颜色转换工具类 * @author tanghui * */ pu ...
- java大小端转换工具类
最近的项目频繁涉及大小端转换的情况,参考github(https://github.com/Frank-Wiebeler/java-Big2LittleEndian/blob/master/src/c ...
- Java 进制转换工具类
/*** 进制转换工具类* @author dell**/ public class HexadecimalUtil {/*** 获得倒序二进制数据* @param hexString* @retur ...
- Java 数字数组随机数工具类 NumberUtils、ArrayUtils、RandomUtils用法
一.NumberUtils工具类 org.apache.commons.lang3.math.NumberUtils /1.NumberUtils.isNumber():判断字符串是否是数字/ Num ...
- JAVA 进制转换工具类 10进制转16进制 10进制转2进制 16进制转2进制 16进制10进制 2进制转10进制 2进制转16进制
进制转换的坑: 注意:使用Integer的方法转换出来的2进制字符串 最高位是没有补零的 ,java的Integer类的toBinaryString()方法转换出来的二进制字符串只会保留最高非零位以后 ...
- java万能编码转换_分享万能java字符串编码转换工具类
package com.zuidaima.util; import java.io.UnsupportedEncodingException; /** * 转换字符串的编码 */ public cla ...
最新文章
- 阿里开源组装式 Flutter 应用框架 Fish Redux
- centos安装后两个启动项、_centos8的启动项配置
- 社区电商平台小区乐获GGV领投超1亿美元融资
- 关于织梦系统不支持php中GD库的问题
- resultset需要关闭吗_旧电脑福音!关闭Windows这些没用的设置,电脑性能至少提升50%!...
- spring boot配置druid(德鲁伊)
- YYH算组合数(NOIP模拟赛Round 6)
- diamond专题(一)– 简介和快速使用
- 【Gym-101775 L】SOS【思维博弈】
- COMSOL模拟卡门涡街的模型
- 跨期套利策略(附:源码)
- 动漫头像1000张萌妹子图片,可以做高清头像壁纸
- 电容的串联和并联的性质
- 高能预警:SFDC安全技术大会将于11月19日在北京举办,岂安科技CEO罗启武受邀演讲
- Android手机图片上传 选择不了本地照片 解决方案
- vue手写上一页下一页
- 关于汉字转拼音的Pinyin4j工具使用
- Javascript小练习——班级学号点名器
- .MMAP是什么格式?
- Python基础-DAY16