Java 阿拉伯数字转换为中文大写数字

/**
* <html>
* <body>
* <P> Copyright 1994 JsonInternational</p>
* <p> All rights reserved.</p>
* <p> Created on 19941115</p>
* <p> Created by Jason</p>
* </body>
* </html>
*/
package cn.ucaner.alpaca.framework.utils.chinese; import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.Map; import cn.ucaner.alpaca.framework.utils.string.StringHelper; /**
* @Package:cn.ucaner.framework.utils
* @ClassName:ChineseNumber
* @Description: <p> 阿拉伯数字转换为中文大写数字. </p>
* @Author: - Jason
* @CreatTime:2017年8月30日 下午2:15:16
* @Modify By:
* @ModifyTime:
* @Modify marker:
* @version V1.0
*/
public class ChineseNumber { private static final String[] BEFORE_SCALE = { "万", "仟", "佰", "拾", "亿", "仟", "佰", "拾", "万", "仟", "佰", "拾", "" }; private static final String[] AFTER_SCALE = { "角", "分" }; private static final String DEFAULT_PATH_SEPARATOR = "."; private static final Map<String, String> NUMBER_MAPPING = new HashMap<String, String>();
static {
NUMBER_MAPPING.put("0", "零");
NUMBER_MAPPING.put("1", "壹");
NUMBER_MAPPING.put("2", "贰");
NUMBER_MAPPING.put("3", "叁");
NUMBER_MAPPING.put("4", "肆");
NUMBER_MAPPING.put("5", "伍");
NUMBER_MAPPING.put("6", "陆");
NUMBER_MAPPING.put("7", "柒");
NUMBER_MAPPING.put("8", "捌");
NUMBER_MAPPING.put("9", "玖");
} public static String getChineseNumber(String number) {
return getChineseNumber(number, null, null);
} public static String getChineseNumber(String number, String unit, String postfix) { String[] numbers = StringHelper.strToStrArray(number, DEFAULT_PATH_SEPARATOR);
if (numbers.length > 2) {
new NumberFormatException("数字格式错误!");
}
int length = numbers[0].length();
int isZero = 0;
StringBuffer result = new StringBuffer(); for (int i = 0; i < length; i++) {
String digit = String.valueOf(numbers[0].charAt(i)); boolean allZero = true; // 如果后继的全部是零,则跳出
for (int j = i; j < length; j++) {
if (numbers[0].charAt(j) != '0') {
allZero = false;
break;
}
} if (allZero) {
boolean hasValue = false;
for (int z = i; z >= 0; z--) {
if (numbers[0].charAt(z) != '0' && length - z <= 7 && length - z >= 5) {
hasValue = true;
break;
}
}
// 加万单位
if ( ( length - i > 4 && length <= 8 ) || ( hasValue && length - i > 4 )) {
result.append(BEFORE_SCALE[8]);
}
// 加亿单位
if (length - i >= 9) {
result.append(BEFORE_SCALE[4]);
}
break;
} if (length < 9 && length - i == 5) {
if (!"0".equals(digit) && isZero > 0) {
result.append(NUMBER_MAPPING.get("0"));
}
if ("0".equals(digit)) {
result.append(BEFORE_SCALE[8]);
if (isZero > 0) {
result.append(NUMBER_MAPPING.get("0"));
}
continue;
}
}
if ("0".equals(digit) && length > 9 && length - i == 9) {
result.append(BEFORE_SCALE[4]);
continue;
} if (isZero < 1 || !"0".equals(digit)) {
if ("0".equals(digit)) {
if (length - i != 6 && length - i != 7) {
result.append(NUMBER_MAPPING.get(digit));
}
} else {
result.append(NUMBER_MAPPING.get(digit));
} if (!"0".equals(digit)) {
result.append(BEFORE_SCALE[BEFORE_SCALE.length - length + i]);
}
} if ("0".equals(digit)) {
isZero++;
} else {
isZero = 0;
}
}
result.append(unit == null ? "圆" : result.append(unit)); if (numbers.length == 1) {
result.append(postfix == null ? "整" : result.append(postfix));
return result.toString();
} length = numbers[1].length();
for (int j = 0; j < length; j++) {
if (j > 2) {
break;
}
if (numbers[1].charAt(j) == '0') {
continue;
}
result.append(NUMBER_MAPPING.get(String.valueOf(numbers[1].charAt(j))));
result.append(AFTER_SCALE[j]);
} result.append(postfix == null ? "整" : result.append(postfix)); return result.toString();
} public static String getChineseNumber(int number) {
return getChineseNumber(new Integer(number));
} public static String getChineseNumber(int number, String unit, String postfix) {
return getChineseNumber(new Integer(number), unit, postfix);
} public static String getChineseNumber(Long number) {
return getChineseNumber(number.toString(), null, null);
} public static String getChineseNumber(Integer number) {
return getChineseNumber(number.toString(), null, null);
} public static String getChineseNumber(Integer number, String unit, String postfix) {
return getChineseNumber(number.toString(), unit, postfix);
} public static String getChineseNumber(Long number, String unit, String postfix) {
return getChineseNumber(number.toString(), unit, postfix);
} public static String getChineseNumber(long number) {
return getChineseNumber(new Long(number));
} public static String getChineseNumber(long number, String unit, String postfix) {
return getChineseNumber(new Long(number), unit, postfix);
} public static String getChineseNumber(double number, String unit, String postfix) {
DecimalFormat f = (DecimalFormat) DecimalFormat.getInstance();
f.applyLocalizedPattern("#.##");
return getChineseNumber(f.format(number), unit, postfix);
} public static String getChineseNumber(double number) {
return getChineseNumber(number, null, null);
} public static String getChineseNumber(Double number) {
return getChineseNumber(number.doubleValue());
} public static String getChineseNumber(Double number, String unit, String postfix) {
return getChineseNumber(number.doubleValue(), unit, postfix);
} public static void main(String[] args) {
System.out.println(getChineseNumber(1994));
System.out.println(getChineseNumber(1994.1115));
System.out.println(getChineseNumber(19941115));
} }
//Outputs
//壹仟玖佰玖拾肆圆整
//壹仟玖佰玖拾肆圆壹角壹分整
//壹仟玖佰玖拾肆万壹仟壹佰壹拾伍圆整

  

Java 阿拉伯数字转换为中文大写数字的更多相关文章

  1. 阿拉伯数字转中文大写数字的JS

    function intToChinese ( str ) { str = str+''; var len = str.length-1; var idxs = ['','十','百','千','万' ...

  2. 使用Java将阿拉伯数字转换为中文数字(适配小数转换)

    Java数字转换工具类 简介 该工具类可以将整数.小数.负数转换为中文的数字,如: 0 --> 零 1 --> 一 2.1 --> 二点一 -2.1 --> 负二点一 具体代码 ...

  3. Java 数组实例——将阿拉伯数字转换为最大写

    题目:将阿拉伯数字转换为最大写,比如1234转换为壹仟贰佰叁拾肆. package my_package; public class Transform { private String[] arr1 ...

  4. C# 阿拉伯数字转换为中文数字/中文数字转换为阿拉伯数字

    项目中经常会格式化数据,转换数字的使用情况比较多,记录一下数字转换的方法! 如果需要转换为繁体中文,将数组里的汉字换成繁体中文即可. 1.阿拉伯数字转换为中文数字 /// <summary> ...

  5. 【转载】C#工具类:人民币金额转换为中文大写

    在涉及到金融业务这一块的系统设计中,时常能够遇到的情况是需要将阿拉伯数字的人民币金额自动转换为中文的大写金额.现在互联网上也有很多网站提供此类服务,只要你输入人民币的阿拉伯数字金额,输入后自动给你转换 ...

  6. C# 日期转换为中文大写

    /// <summary> /// 日期转换为中文大写 /// </summary> public class UpperConvert { public UpperConve ...

  7. 用Python递归解决阿拉伯数字转为中文财务数字格式的问题(2)--打开思路的一种方法

    几天前自己写了个将阿拉伯数字转为中文财务数字的程序.用的递归,不幸的是它是树形递归. 虽然实际过程中不太可能出现金额数字大到让Python递归栈溢出,但是始终是一块心病,这玩意终究在理论上是受限制的. ...

  8. .Net C# 阿拉伯数字转为中文金额数字

    一个练习,将阿拉伯数字转为中文金额数字,针对包含整数的金额有问题 代码: public string ReturnStr(string inputNum) { ", }; string[] ...

  9. JS把数字金额转换成中文大写数字的函数

    //把数字金额转换成中文大写数字的函数 function num2rmb ($num){ $c1="零壹贰叁肆伍陆柒捌玖"; $c2="分角元拾佰仟万拾佰仟亿" ...

随机推荐

  1. LCA的几种做法

    P3379 LCA $ 1:$蜗牛爬式 void dfs(int u,int fa) { f[u]=fa;//预处理father for(int i=head[u]; i; i=e[i].nxt) i ...

  2. 拼多多面试真题:如何用 Redis 统计独立用户访问量!

    阅读本文大概需要 2.8 分钟. 作者:沙茶敏碎碎念 众所周至,拼多多的待遇也是高的可怕,在挖人方面也是不遗余力,对于一些工作 3 年的开发,稍微优秀一点的,都给到 30K 的 Offer. 当然,拼 ...

  3. pyqt(day1)

    参考代码地址:https://github.com/cxinping/Pyqt5 pyqt在线帮助文档:https://www.riverbankcomputing.com/static/Docs/P ...

  4. mpvue中按需引入echarts

    大家都知道小程序文件大小不能超过2M, 在项目中引入echarts后,文件大小远远超出2M了.因为echarts文件默认是包含所有图表代码的,所以文件体积会比较大.解决办法如下: 安装 首先我们先安装 ...

  5. answer

    https://www.cnblogs.com/549294286/p/10451394.html 基于BIO实现的Server端,当建立了100个连接时,会有多少个线程?如果基于NIO,又会是多少个 ...

  6. Java编程思想之七复用类

    复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对之加以改变是不够的,它还必须做更多的事情. 使用类而不破坏程序代码: 在新类中产生现有对象.由于新的类是由现有 ...

  7. Java多次启动相同jar程序

    背景 现在很多软件都支持集群部署,但是测试环境通常资源有限,所以一般通过单台机器模拟集群部署(使用不同端口,运行相同jar包),本文的目的就是通过多种方式实现此需求. 两个程序 1.jar程序 ① s ...

  8. 使用visual studio code运行html

    可以安装插件:open in browser 安装好插件后,编辑html网页的时候,右键多了两个菜单: 1.Open in Default Browser 2.Open in Other Browse ...

  9. android为什么不允许新开启一个线程来更新UI,而是用handler来更新界面

    下面是快速创建一个新线程的方法: 第一种:直接创建子线程并启动      new Thread() {@Overridepublic void run() {     //这里写入子线程需要做的工作  ...

  10. jeecg数据库切换至mysql8.0方式

    1.修改pom.xml   mysql版本 <mysql.version>8.0.11</mysql.version> 2.修改dbconfig.properties文件 hi ...