Java将数字金额转换为中文大写
import java.math.BigDecimal;
import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** 2022/5/5** @author lf*/
public class MoneyToChineseUtils {/*** 不考虑分隔符的正确性*/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);// 小数部分String fraction = matcher.group(2);String result = "";if (!integer.equals("0")) {// 整数部分result += integer2rmb(integer) + UNITS[0];}if (fraction.equals("00")) {// 添加[整]result += UNITS[3];} else if (fraction.startsWith("0") && integer.equals("0")) {// 去掉分前面的[零]result += fraction2rmb(fraction).substring(1);} else {// 小数部分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) {StringBuilder buffer = new StringBuilder();// 从个位数开始转换int i, j;for (i = integer.length() - 1, j = 0; i >= 0; i--, j++) {char n = integer.charAt(i);if (n == '0') {// 当n是0且n的右边一位不是0时,插入[零]if (i < integer.length() - 1 && integer.charAt(i + 1) != '0') {buffer.append(RMB_NUMS[0]);}// 插入[万]或者[亿]if (j % 4 == 0) {if (i > 0 && integer.charAt(i - 1) != '0'|| i > 1 && integer.charAt(i - 2) != '0'|| i > 2 && integer.charAt(i - 3) != '0') {buffer.append(U2[j / 4]);}}} else {if (j % 4 == 0) {// 插入[万]或者[亿]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();}/*** 对金额的格式调整到分** @param preMoney* @return*/public static String moneyFormat(BigDecimal 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();}/*** 对金额的格式调整到分** @param preMoney* @return*/public static String moneyFormat(String preMoney) {//23->23.00String money = preMoney;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();}/*** @param args*/public static void main(String[] args) {
// System.out.println(MoneyToChineseUtils.moneyFormat(123.2803));System.out.println(MoneyToChineseUtils.convert(100.0));}}
结果:
Java将数字金额转换为中文大写相关推荐
- Java 描述将数字金额转换为中文大写
Java 描述金额转换(数字转换成中文大写) 解题思路:把每一位转换成对应的大写,然后在不足地方补零,最后加上相应单位. 代码如下: import java.util.Scanner; ...
- JS将数字金额转换为中文大写
最近在做一个关于金额的票据显示,有部分需要将数字金额改为中文大写金额,下面给出具体实现的JS var changeMoney = function(n) {var fraction = ['角', ' ...
- 正则也很牛,把阿拉伯数字的金额转换为中文大写数字
using System; using System.Text.RegularExpressions; class Program { // 把阿拉伯数字的金额转换为中文大写数字 static ...
- 将金额转换为中文大写
将金额转换为中文大写 思路 判断符号,0则直接返回 数字去掉点 00结尾的要加'整' 循环,从后面每次取一个数位上的值直到最前面, 若是非零则加上对应的数值和单位 若是零,判断上一个是否为零,是,则不 ...
- java将输入的数字金额转换为中文大写金额
前言 将输入的数字字符串中的每一个数字字符转换为对应的中文大写,例如12345转换为壹贰叁肆伍,再将此中文大写和对应的单位进行字符串的拼接并一起输出 输出结果为:零佰零拾壹万贰仟叁佰肆拾伍元 一.具体 ...
- python数字金额转换为中文大写金额(角、分)
初学python,有错望大佬改正,谢谢 编写程序,根据用户输入的金额数字转换成相应的中文大写数字.例如,1002.34转换为"壹仟零贰圆叁角肆分",100转换为"壹佰圆整 ...
- Java编写的金额转中文大写
package com.b510.number2char;import java.math.BigDecimal;/*** 数字转换为汉语中人民币的大写*/ public class NumberTo ...
- 将数字金额转换为中文大写金额
/*------Oracle数据库------*/ 在存储过程中,将数据中的金额小写转大写的函数. create or re ...
- 将数字金额转换为中文大写金额(在网上找的)
/*------Oracle数据库------*/ 在存储过程中,将数据中的金额小写转大写的函数. create or re ...
- java实现数字转换人民币中文大写工具
业务场景: 1.在人事业务系统开发的报表打印文书时经常需要将人民币数值转换为大写, 所以用java写了一个通用的大写转换函数. 为了更加方便调用函数的参数使用字符串类型.例如:825.45 转换后:捌 ...
最新文章
- 大数据学习01——配置虚拟机节点相关网络
- python飞机大战的实训心得体会-python之基础总结(飞机大战)
- jquery clone 与 clone(true) 的区别
- PHP 手册 参考文档
- MySQL数据库如何做好优化
- jquery显示与隐藏效果
- PHP查询函数调用堆栈
- mysql各种key_SQL中的各种键
- 蔬菜出口流程 |外贸流程
- Excel-冻结窗口和筛选
- Jenkins集成动态salve报错 连接测试报错:
- 转:接班人都是“剩出来”的,选接班人9条必用原则
- 新手前端微信小程序img图片无法显示问题
- 文件下载加水印工具类(pdf、word、excel、图片)
- 认识 DELL EMC VPLEX VS6物理配置
- 零基础怎么做好海报重叠设计
- java 1.8(jdk1.8安装教程)
- 计算机比赛证书p图,雅礼中学计算机协会第二届“P图”大赛报名正式启动
- 迅雷网页嗅探下载链接的实现
- Vue.js 事件处理器,医院的胸牌佩戴在哪,给医生护士佩戴赞赏胸牌,对服务质量打分。