import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.NumberFormat;
/**
* 中文数字格式化,将数字转换成中文大写形式,以及将中文大写形式转换成数字
* @title CNNumberFormat.java
* @author chouhua
* @date 2013-4-16
*/
public class CNNumberFormat {
/**
* 中文数字正写
*/
private static final char[] cnNumbers = { '零', '壹', '贰', '叁', '肆', '伍',
'陆', '柒', '捌', '玖' };
private static final char[] stdNumbers = { '0', '1', '2', '3', '4', '5',
'6', '7', '8', '9' };
/**
* 货币单位
*/
// 顺序不能变,否则下面的实现代码页需要同步修改
private static final char[] units = { '厘', '分', '角', '元', '拾', '佰',
'仟', '万', '拾', '佰', '仟', '亿', '拾', '佰', '仟' };
/**
* 是否输出货币单位元角分的完整格式,简单格式通常用于套打纸张上已印有货币单位的情形。
*/
private boolean fullFormat = true;
public CNNumberFormat() {
}
public CNNumberFormat(boolean fullFormat) {
this.fullFormat = fullFormat;
}
/**
* 取得大写形式的字符串
* @return 中文正写的数字字符串
*/
public String format(double d) {
NumberFormat nf = new DecimalFormat("#.###");
String original = String.valueOf(nf.format(d));
return this.transform(original);
}
public String format(long ln) {
return this.transform(String.valueOf(ln));
}
private String transform(String original) {
String integerPart = "";
String floatPart = "";
if (original.indexOf(".") > -1) {
int dotIndex = original.indexOf(".");
integerPart = original.substring(0, dotIndex);
floatPart = original.substring(dotIndex + 1);
}
else {
integerPart = original;
}
StringBuffer sb = new StringBuffer();
// 整数部分处理
for (int i = 0; i < integerPart.length(); i++) {
int number = Integer
.parseInt(String.valueOf(integerPart.charAt(i)));
sb.append(cnNumbers[number]);
if (fullFormat) {
sb.append(units[integerPart.length() + 2 - i]);
}
}
// 小数部分处理
if (floatPart.length() >= 1) {
for (int i = 0; i < floatPart.length(); i++) {
int number = Integer.parseInt(String.valueOf(floatPart
.charAt(i)));
sb.append(cnNumbers[number]);
if (fullFormat && i < 3) {
sb.append(units[2 - i]);
}
}
}
else if (fullFormat) {
sb.append('整');
}
return sb.toString();
}
/**
* 将中文大写数字字符串转换成对应的数字类型
* @param cnNumStr
* @return Java Number类型对象
*/
public Number parse(String cnNumStr) {
if (null == cnNumStr || "".equals(cnNumStr.trim())) {
return null;
}
cnNumStr = cnNumStr.replaceAll("整", "");
if (!cnNumStr.endsWith("元")) {
cnNumStr = cnNumStr.replaceAll("元", ".");
}
for (int i = 0; i < cnNumbers.length; i++) {
cnNumStr = cnNumStr.replace(cnNumbers[i], stdNumbers[i]);
}
for (int j = 0; j < units.length; j++) {
cnNumStr = cnNumStr.replaceAll(units[j] + "", "");
}
BigDecimal b = new BigDecimal(cnNumStr);
return b;
}
/**
* @param args
*/
public static void main(String[] args) {
CNNumberFormat cnFmt = new CNNumberFormat(true);
System.out.println(cnFmt.format(123456789.12345));
System.out.println(cnFmt.format(123456789));
System.out.println(cnFmt.format(.123456789));
System.out.println(cnFmt.format(0.1234));
System.out.println(cnFmt.format(1));
System.out.println(cnFmt.format(12));
System.out.println(cnFmt.format(123));
System.out.println(cnFmt.format(1234));
System.out.println(cnFmt.format(12345));
System.out.println(cnFmt.format(123456));
System.out.println(cnFmt.format(1234567));
System.out.println(cnFmt.format(12345678));
System.out.println(cnFmt.format(123456789));
System.out.println(cnFmt.parse("壹亿贰仟叁佰肆拾伍万陆仟柒佰捌拾玖元壹角贰分叁厘"));
}
运行结果:
壹亿贰仟叁佰肆拾伍万陆仟柒佰捌拾玖元壹角贰分叁厘
壹亿贰仟叁佰肆拾伍万陆仟柒佰捌拾玖元整
零元壹角贰分叁厘
零元壹角贰分叁厘
壹元整
壹拾贰元整
壹佰贰拾叁元整
壹仟贰佰叁拾肆元整
壹万贰仟叁佰肆拾伍元整
壹拾贰万叁仟肆佰伍拾陆元整
壹佰贰拾叁万肆仟伍佰陆拾柒元整
壹仟贰佰叁拾肆万伍仟陆佰柒拾捌元整
壹亿贰仟叁佰肆拾伍万陆仟柒佰捌拾玖元整
123456789.123
- 浏览: 853833 次
文章分类
- 全部博客 (365)
- java (124)
- spring mvc (21)
- spring (22)
- struts2 (6)
- jquery (27)
- javascript (24)
- mybatis/ibatis (8)
- hibernate (7)
- compass (11)
- lucene (26)
- flex (0)
- actionscript (0)
- webservice (8)
- rabbitMQ/Socket (15)
- jsp/freemaker (5)
- 数据库 (27)
- 应用服务器 (21)
- Hadoop (1)
- PowerDesigner (3)
- EJB (0)
- JPA (0)
- PHP (2)
- C# (0)
- .NET (0)
- html (2)
- xml (5)
- android (7)
- flume (1)
- zookeeper (0)
- 证书加密 (2)
- maven (1)
- redis (2)
- cas (11)
最新评论
-
zuxianghuang:
通过pom上传报错 Artifact upload faile ...
nexus上传了jar包.通过maven引用当前jar,不能取得jar的依赖 -
流年末年:
百度网盘的挂了吧???
SSO单点登录系列3:cas-server端配置认证方式实践(数据源+自定义java类认证) -
953434367:
UfgovDBUtil 是什么类
Java发HTTP POST请求(内容为xml格式) -
smilease:
帮大忙了,非常感谢
freemaker自动生成源代码 -
syd505:
十分感谢作者无私的分享,仔细阅读后很多地方得以解惑。
Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
发表评论
-
eclispe 实用插件大全
2016-03-31 10:17 836在一个项目的完整的生命周期中,其维护费用,往往是其开发费用的 ... -
单点登录 SSO Session
2016-03-14 16:56 4052单点登录在现在的 ... -
通用权限管理设计 之 数据库结构设计
2016-01-26 13:22 2952通用权限管理设计 之 ... -
分享一个基于ligerui的系统应用案例ligerRM V2(权限管理系统)(提供下载)
2016-01-26 13:22 1493分享一个基于ligerui的系统应用案例ligerRM V2 ... -
通用权限管理设计 之 数据权限
2016-01-26 13:20 739通用权限管理设计 之 数据权限 阅读目录 前 ... -
使用RSA进行信息加密解密的WebService示例
2015-12-28 10:30 875按:以下文字涉及RS ... -
防止网站恶意刷新
2015-10-22 10:55 705import java.io.IOExcept ... -
单点登录
2015-10-19 14:24 763Cas自定义登录页面Ajax实现 博客分类: ... -
session如何在http和https之间同步
2015-09-14 09:25 2254首先说下 http>https>http ... -
基于 Quartz 开发企业级任务调度应用
2015-08-17 11:17 837Quartz 是 OpenSy ... -
Java加密技术(十二)——*.PFX(*.p12)&个人信息交换文件
2015-08-17 11:17 876今天来点实际工 ... -
Java加密技术(十)——单向认证
2015-08-13 10:13 679在Java 加密技术(九)中,我们使 ... -
Java加密技术(九)——初探SSL
2015-08-13 10:12 885在Java加密技术(八)中,我们模拟 ... -
Java加密技术(八)——数字证书
2015-08-13 10:12 891本篇的主要内容为Java证书体系的实 ... -
Java加密技术(七)——非对称加密算法最高级ECC
2015-08-13 10:12 972ECC ECC-Elliptic Curv ... -
Java加密技术(六)——数字签名算法DSA
2015-08-13 10:11 1059接下来我们介绍DSA数字签名,非对称 ... -
Java加密技术(五)——非对称加密算法的由来DH
2015-08-12 16:13 868接下来我们 ... -
Java加密技术(四)——非对称加密算法RSA
2015-08-12 16:11 1093接下来我们介绍典型的非对称加密算法—— ... -
Java加密技术(三)——PBE算法
2015-08-12 16:10 957除了DES,我们还知道有DESede( ... -
Java加密技术(二)——对称加密算法DES&AES
2015-08-12 16:09 719接下来我们介绍对称加密算法,最常用的莫 ...
相关推荐
Java 中实现数字金额到中文大写字符的转换 Java 中实现数字金额到中文大写字符的转换是指将阿拉伯数字转换成中文大写的过程。本文将详细介绍 Java 实现数字金额到中文大写字符的转换的知识点。 知识点一: 数字...
Java 实现数字转换人民币中文大写工具 Java 实现数字转换人民币中文大写工具是指使用 Java 语言将数字转换为人民币中文大写格式的工具。该工具具有很高的实用价值,特别是在人事业务系统开发中,经常需要将数字转换...
在Java编程语言中,将中文数字转换为阿拉伯数字是一个常见的需求,特别是在处理中文文本数据时。这个场景下,我们有一个名为“中文数字转成阿拉伯数字 java 实现”的压缩包,包含了一个实现此功能的Java包和一个单元...
在Java编程中,将钱币小写金额转换为大写金额是一项常见的需求,特别是在财务系统或者电商平台上,为了符合规范和避免误解,金额通常会以大写形式展示。本知识点主要探讨如何利用Java实现这一功能。 首先,我们需要...
输入字符,通过正则验证是否为金额不超过万亿精确到小数点后两位,然后将数字转换为大写 包括后台java正则验证及前台js验证 请输入一个数字(精确到小数点后两位): fdsa54325.54 fdsa54325.54 false 请输入一个...
根据提供的文件信息,可以看出这是一个Java程序,用于将阿拉伯数字转换为中文大写形式,并且能够处理包含小数点的情况。接下来我们将对这个程序的关键部分进行详细的解析与解释。 ### 核心知识点概述 1. **数据...
本文将详细介绍如何使用 Java 实现人民币金额数字转换成大写的解决方案。 Java 中的 NumberFormat 类 在 Java 中,NumberFormat 类是用于格式化数字的类。它提供了多种格式化方式,例如整数、浮点数、货币等。...
这是一个把人民币数字转换成大写的java程序
人民币数字转换成汉字大写 android Java 运行效率
通过这样的Java实现,我们能够轻松地将金额数字转换为大写汉字,满足各种财务报表和数据处理的需求。当然,实际的项目中还可能需要考虑性能优化,特别是对于大数据量的转换,可以考虑使用流式处理或者多线程等技术来...
JAVA实现阿拉伯数字金额转汉语大写是指使用JAVA语言将阿拉伯数字金额转换为汉语大写格式的过程。该过程主要涉及到数字金额的处理和汉语大写格式的转换。 在该过程中,需要定义两个数组upChinese和upChinese2,分别...
在编程领域,尤其是在Java语言中,将数字转换为大写汉字是常见的需求,尤其是在财务、会计等场景下,为了满足规范和格式要求。这个过程通常称为数字汉字转换,它涉及到字符编码、字符串处理以及数学运算等多个方面的...
用java实现的将人民币从数字转换为大写
在给定的压缩包中,`Java数字换成汉字大写`应该就是实现了以上逻辑的Java类。通过直接运行和测试这个类,我们可以快速检查其功能是否符合预期。这个类可能包含了一些特殊处理,比如处理0的情况、保留的小数位数限制...
在Java编程中,将金额的阿拉伯数字转换为中文汉字大写是常见的财务处理需求,主要用于防止数字篡改,增加财务数据的安全性和准确性。这个过程通常称为金额数字化,它涉及到将小数点、整数和小数部分分别转换,并且...
在Java编程中,将阿拉伯数字转换为大写金额以及将大写金额转换回阿拉伯数字是常见的财务处理需求。这些操作通常用于财务报表、发票或银行系统中,以确保数据的准确性和一致性。以下是对这个主题的详细解释: 一、...
在Java编程中,将数字转换成大写是常见的需求,特别是在处理财务或会计相关的应用时。这个题目描述了一个简单的Java程序设计实验,其目的是将输入的浮点数值转换成中文金额的大写形式。以下是该实验涉及的主要知识点...
本文将深入探讨如何使用Java来实现阿拉伯数字到金额汉字大写的转换。 首先,我们需要了解金额汉字大写的基本规则。在中国,金额的汉字大写有特定的规则,例如1到10的汉字大写分别是壹、贰、叁、肆、伍、陆、柒、捌...
在Java编程中,将阿拉伯数字转化为中文金额大写是一项常见的任务,特别是在财务系统或报表生成中。这个题目要求实现一个程序,能够读取输入的阿拉伯数字字符串,然后将其转换为符合中国会计规范的中文大写金额表示。...
java将字符串中数字转换为中文大写,在输出字符串java将字符串中数字转换为中文大写,在输出字符串java将字符串中数字转换为中文大写,在输出字符串java将字符串中数字转换为中文大写,在输出字符串java将字符串中数字...