前言:

输入数字金额参数,运行程序得到其对应的大写中文金额;例如:输入 12.56,输出 12.56 : 壹拾贰元伍角陆分。

代码:

/**

* @Title: ConvertUpMoney

* @Description: 将数字金额转换为大写中文金额

* @date: 2019年6月18日 下午10:52:27

*/

public class ConvertUpMoney {

// 大写数字

private static final String[] NUMBERS = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};

// 整数部分的单位

private static final String[] IUNIT = {"元","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟","万","拾","佰","仟"};

// 小数部分的单位

private static final String[] DUNIT = {"角","分","厘"};

/**

* 转换为大写的中文金额

* @param str 字符串类型的 金额数字

* @return

*/

public static String toChinese(String str) {

// 判断输入的金额字符串是否符合要求

if (StringUtils.isBlank(str) || !str.matches("(-)?[\\d]*(.)?[\\d]*")) {

return "抱歉,请输入数字!";

}

if("0".equals(str) || "0.00".equals(str) || "0.0".equals(str)) {

return "零元";

}

// 判断金额数字中是否存在负号"-"

boolean flag = false;

if(str.startsWith("-")){

// 标志位,标志此金额数字为负数

flag = true;

str = str.replaceAll("-", "");

}

// 去掉金额数字中的逗号","

str = str.replaceAll(",", "");

String integerStr;//整数部分数字

String decimalStr;//小数部分数字

// 初始化:分离整数部分和小数部分

if(str.indexOf(".")>0) {

integerStr = str.substring(0,str.indexOf("."));

decimalStr = str.substring(str.indexOf(".") + 1);

}else if(str.indexOf(".")==0) {

integerStr = "";

decimalStr = str.substring(1);

}else {

integerStr = str;

decimalStr = "";

}

// beyond超出计算能力,直接返回

if(integerStr.length()>IUNIT.length) {

return "超出计算能力!";

}

// 整数部分数字

int[] integers = toIntArray(integerStr);

// 判断整数部分是否存在输入012的情况

if (integers.length>1 && integers[0] == 0) {

return "抱歉,输入数字不符合要求!";

}

// 设置万单位

boolean isWan = isWan5(integerStr);

// 小数部分数字

int[] decimals = toIntArray(decimalStr);

// 返回最终的大写金额

String result = getChineseInteger(integers, isWan) + getChineseDecimal(decimals);

if(flag){

// 如果是负数,加上"负"

return "负" + result;

}else{

return result;

}

}

/**

* 将字符串转为int数组

* @param number 数字

* @return

*/

private static int[] toIntArray(String number) {

int[] array = new int[number.length()];

for(int i = 0;i

array[i] = Integer.parseInt(number.substring(i,i+1));

}

return array;

}

/**

* 将整数部分转为大写的金额

* @param integers 整数部分数字

* @param isWan 整数部分是否已经是达到【万】

* @return

*/

public static String getChineseInteger(int[] integers,boolean isWan) {

StringBuffer chineseInteger = new StringBuffer("");

int length = integers.length;

if (length == 1 && integers[0] == 0) {

return "";

}

for(int i=0; i

String key = "";

if(integers[i] == 0) {

if((length - i) == 13)//万(亿)

key = IUNIT[4];

else if((length - i) == 9) {//亿

key = IUNIT[8];

}else if((length - i) == 5 && isWan) {//万

key = IUNIT[4];

}else if((length - i) == 1) {//元

key = IUNIT[0];

}

if((length - i)>1 && integers[i+1]!=0) {

key += NUMBERS[0];

}

}

chineseInteger.append(integers[i]==0?key:(NUMBERS[integers[i]]+IUNIT[length - i -1]));

}

return chineseInteger.toString();

}

/**

* 将小数部分转为大写的金额

* @param decimals 小数部分的数字

* @return

*/

private static String getChineseDecimal(int[] decimals) {

StringBuffer chineseDecimal = new StringBuffer("");

for(int i = 0;i

if(i == 3) {

break;

}

chineseDecimal.append(decimals[i]==0?"":(NUMBERS[decimals[i]]+DUNIT[i]));

}

return chineseDecimal.toString();

}

/**

* 判断当前整数部分是否已经是达到【万】

* @param integerStr 整数部分数字

* @return

*/

private static boolean isWan5(String integerStr) {

int length = integerStr.length();

if(length > 4) {

String subInteger = "";

if(length > 8) {

subInteger = integerStr.substring(length- 8,length -4);

}else {

subInteger = integerStr.substring(0,length - 4);

}

return Integer.parseInt(subInteger) > 0;

}else {

return false;

}

}

// Test

public static void main(String[] args) {

String number = "12.56";

System.out.println(number+": "+ConvertUpMoney.toChinese(number));

number = "1234567890563886.123";

System.out.println(number+": "+ConvertUpMoney.toChinese(number));

number = "1600";

System.out.println(number+": "+ConvertUpMoney.toChinese(number));

number = "156,0";

System.out.println(number+": "+ConvertUpMoney.toChinese(number));

number = "-156,0";

System.out.println(number+": "+ConvertUpMoney.toChinese(number));

number = "0.12";

System.out.println(number+": "+ConvertUpMoney.toChinese(number));

number = "0.0";

System.out.println(number+": "+ConvertUpMoney.toChinese(number));

number = "01.12";

System.out.println(number+": "+ConvertUpMoney.toChinese(number));

number = "0125";

System.out.println(number+": "+ConvertUpMoney.toChinese(number));

number = "-0125";

System.out.println(number+": "+ConvertUpMoney.toChinese(number));

number = "sdw5655";

System.out.println(number+": "+ConvertUpMoney.toChinese(number));

System.out.println(null+": "+ConvertUpMoney.toChinese(null));

}

}

运行:

12.56: 壹拾贰元伍角陆分

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

1600: 壹仟陆佰元

156,0: 壹仟伍佰陆拾元

-156,0: 负壹仟伍佰陆拾元

0.12: 壹角贰分

0.0: 零元

01.12: 抱歉,输入数字不符合要求!

0125: 抱歉,输入数字不符合要求!

-0125: 抱歉,输入数字不符合要求!

sdw5655: 抱歉,请输入数字!

null: 抱歉,请输入数字!

扩展:

在平时的学习中,还看到了一个十分有用的工具包,这个工具包中含有一个类型转换的工具类,可以实现“ 金额的大小写 ”,但是这个工具类也有一些局限,“ 转换为大写只能精确到分(小数点儿后两位),之后的数字会被忽略 ”;这个工具包叫“ Hutool ”,学习地址:Hutool 类型转换工具类-Convert 。

❤不要忘记留下你学习的足迹 [点赞 + 收藏 + 评论]嘿嘿ヾ

一切看文章不点赞都是“耍流氓”,嘿嘿ヾ(◍°∇°◍)ノ゙!开个玩笑,动一动你的小手,点赞就完事了,你每个人出一份力量(点赞 + 评论)就会让更多的学习者加入进来!非常感谢! ̄ω ̄=

java 金额转中文_Java实现 将数字金额转为大写中文金额相关推荐

  1. java数字金额大写金额_Java实现 “ 将数字金额转为大写中文金额 ”

    前言: 输入数字金额参数,运行程序得到其对应的大写中文金额:例如:输入 12.56,输出 12.56 : 壹拾贰元伍角陆分:重点来了:本人亲测有效. 奉上代码: /** * @Title: Conve ...

  2. Java实现 “ 将数字金额转为大写中文金额 ”

    最困难的事情就是认识自己! 个人博客,欢迎访问! 前言: 输入数字金额参数,运行程序得到其对应的大写中文金额:例如:输入 12.56,输出 12.56 : 壹拾贰元伍角陆分:重点来了:本人亲测有效. ...

  3. php 将数字转为大写,将数字小写转为大写 php

    将数字小写转为大写,这原来是一个类,我改写为一个函数.修复和增加了其中一些在实际工作中需要的功能.使其更加全面.100%可用. function change_num($num) { $d = arr ...

  4. java treemap字母排序_Java TreeMap对数字,英文字母,汉字等排序例子

    首页 > 基础教程 > 集合框架 > TreeMap类 Java TreeMap对数字,英文字母,汉字等排序例子 1. 对于一些简单的数字,英文字母等排序 TreeMap hm = ...

  5. java判断字符串有中文_JAVA入门之正则表达式判断字符串包含中文

    测试程序运行结果!可以看到,程序可以正确判断出用户输入的信息字符串是否包含中文! 整个程序代码如下: import java.io.BufferedReader; import java.io.IOE ...

  6. java输入一个数字输出_java 输入一个数字,反转输出这个数字的值(实现方法)

    如下所示: package 第四天; import java.util.Scanner; public class 数字反转 { public static void main(String[] ar ...

  7. java 读取txt乱码_java 逐行读取txt文本如何解决中文乱码

    java读取txt文本中如含有中文,可能会出现乱码,解决方案是: 1.要统一编码,java工程的编码,txt文本编码,java工程中的java文本编码都统一为utf-8: 2.利用 InputStre ...

  8. java课程设计 华容道_Java课设-数字华容道

    #2019-2020学年第一学期Java课设 #数字华容道 ##一:团队成员介绍及任务分配 ####王鑫杰 201821123112 组长 dao模式结合数据库 登录验证 排行榜展示 ####林炜 2 ...

  9. java 判断是否包含中文_Java中判断字符串中是否包含中文汉字

    一般在用户登录时需要判断用户名是否为中文汉字,可以使用正则表达式,来匹配字符是否包含中文,中文通配符为[u4e00-u9fa5]匹配中文,下面为大家分享一下使用Matcher来解决此问题. 代码如下: ...

最新文章

  1. IplImage和Mat间的相互转换
  2. oracle 登录非系统用户,非Oracle用户使用操作系统验证登陆(/ as sysdba)
  3. ORACLE数据库在导入导出时序列不一致的问题
  4. Nacos-NacosRule负载均衡
  5. [vue] 第一次加载页面时会触发哪几个钩子?
  6. 【批处理】通过bat文件执行python程序
  7. NOI入门级:排序算法
  8. zzuliOJ 1894: 985的方格难题 【dp】
  9. threejs加载obj模型_倾斜摄影三维模型几种常见的格式,你能说出哪些?
  10. Docker-07-docker compose
  11. 获取.propertys文件获取文件内容
  12. 【渝粤教育】国家开放大学2019年春季 2328仓储与配送管理 参考试题
  13. python量化需要什么基础_真格量化入门课程——②真格量化Python策略编写思路
  14. ppt背景图片怎么更换应用到全部
  15. dockerexec 的使用-it操作
  16. Java实现生成和解析二维码
  17. 纯js制作图片轮播效果
  18. 如何提高自己的编程能力
  19. python学习:向Firebird数据库表中插入数据
  20. 家园系统服务器,1月13日服务器更新 调整家园系统帮盟系统

热门文章

  1. 合信达 机器人_智能家居背后的操控者
  2. 计时器模仿地球绕太阳圆周运动
  3. 生活随记 - 2020国庆第六天
  4. C++实现网络连接检测程序,再也不用担心电脑连不上网了!
  5. [ArcGIS] 表格输出为shp时日期时间列只保留日期而时间被截掉
  6. “AI助力计划”上线,3D点云等标注工具1折起
  7. 一键生成你的微信社交数据报告
  8. Oracle 如何删除主键新增主键
  9. C语言中,1~n的阶乘
  10. matlab java 路径设置_Matlab Java类路径问题