`
chouhuayen
  • 浏览: 1848 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

Java实现的数字中文大写(正写)转换

阅读更多
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

分享到:
评论

相关推荐

    java将数字转换成大写字母

    Java 中实现数字金额到中文大写字符的转换 Java 中实现数字金额到中文大写字符的转换是指将阿拉伯数字转换成中文大写的过程。本文将详细介绍 Java 实现数字金额到中文大写字符的转换的知识点。 知识点一: 数字...

    java实现数字转换人民币中文大写工具

    Java 实现数字转换人民币中文大写工具 Java 实现数字转换人民币中文大写工具是指使用 Java 语言将数字转换为人民币中文大写格式的工具。该工具具有很高的实用价值,特别是在人事业务系统开发中,经常需要将数字转换...

    中文数字转成阿拉伯数字 java 实现

    在Java编程语言中,将中文数字转换为阿拉伯数字是一个常见的需求,特别是在处理中文文本数据时。这个场景下,我们有一个名为“中文数字转成阿拉伯数字 java 实现”的压缩包,包含了一个实现此功能的Java包和一个单元...

    java钱币小写转换大写

    在Java编程中,将钱币小写金额转换为大写金额是一项常见的需求,特别是在财务系统或者电商平台上,为了符合规范和避免误解,金额通常会以大写形式展示。本知识点主要探讨如何利用Java实现这一功能。 首先,我们需要...

    java 阿拉伯数字转化中文大写

    根据提供的文件信息,可以看出这是一个Java程序,用于将阿拉伯数字转换为中文大写形式,并且能够处理包含小数点的情况。接下来我们将对这个程序的关键部分进行详细的解析与解释。 ### 核心知识点概述 1. **数据...

    java 正则数字金额转换为大写

    输入字符,通过正则验证是否为金额不超过万亿精确到小数点后两位,然后将数字转换为大写 包括后台java正则验证及前台js验证 请输入一个数字(精确到小数点后两位): fdsa54325.54 fdsa54325.54 false 请输入一个...

    java程序实现人民币大写转换

    这是一个把人民币数字转换成大写的java程序

    Java人民币金额数字转换成大写

    本文将详细介绍如何使用 Java 实现人民币金额数字转换成大写的解决方案。 Java 中的 NumberFormat 类 在 Java 中,NumberFormat 类是用于格式化数字的类。它提供了多种格式化方式,例如整数、浮点数、货币等。...

    人民币数字转换成汉字大写

    人民币数字转换成汉字大写 android Java 运行效率

    java实现人民币大小写转换

    用java实现的将人民币从数字转换为大写

    JAVA实现金额转换大写

    通过这样的Java实现,我们能够轻松地将金额数字转换为大写汉字,满足各种财务报表和数据处理的需求。当然,实际的项目中还可能需要考虑性能优化,特别是对于大数据量的转换,可以考虑使用流式处理或者多线程等技术来...

    JAVA实现阿拉伯数字金额转汉语大写.doc

    JAVA实现阿拉伯数字金额转汉语大写是指使用JAVA语言将阿拉伯数字金额转换为汉语大写格式的过程。该过程主要涉及到数字金额的处理和汉语大写格式的转换。 在该过程中,需要定义两个数组upChinese和upChinese2,分别...

    java将字符串中数字转换为中文大写,在输出字符串

    java将字符串中数字转换为中文大写,在输出字符串java将字符串中数字转换为中文大写,在输出字符串java将字符串中数字转换为中文大写,在输出字符串java将字符串中数字转换为中文大写,在输出字符串java将字符串中数字...

    将阿拉伯数字转换为金额的汉字大写

    本文将深入探讨如何使用Java来实现阿拉伯数字到金额汉字大写的转换。 首先,我们需要了解金额汉字大写的基本规则。在中国,金额的汉字大写有特定的规则,例如1到10的汉字大写分别是壹、贰、叁、肆、伍、陆、柒、捌...

    java 数字转化为汉字大写

    在给定的压缩包中,`Java数字换成汉字大写`应该就是实现了以上逻辑的Java类。通过直接运行和测试这个类,我们可以快速检查其功能是否符合预期。这个类可能包含了一些特殊处理,比如处理0的情况、保留的小数位数限制...

    数字转换为大写(JAVA)

    在Java编程中,将数字转换成大写是常见的需求,特别是在处理财务或会计相关的应用时。这个题目描述了一个简单的Java程序设计实验,其目的是将输入的浮点数值转换成中文金额的大写形式。以下是该实验涉及的主要知识点...

    java阿拉伯数字转大写金额+大写金额转阿拉伯数字

    综上所述,Java中实现阿拉伯数字与大写金额之间的转换涉及到字符串处理、数字映射、金额单位识别等多个方面,需要理解转换规则并编写相应的处理逻辑。通过封装成函数或利用现有库,可以简化这部分的开发工作。

    java 实现 金额转成中文大写形式

    在Java编程中,将金额的阿拉伯数字转换为中文汉字大写是常见的财务处理需求,主要用于防止数字篡改,增加财务数据的安全性和准确性。这个过程通常称为金额数字化,它涉及到将小数点、整数和小数部分分别转换,并且...

    java写的将阿拉伯数字转化为中文金额的大写方式

    在Java编程中,将阿拉伯数字转化为中文金额大写是一项常见的任务,特别是在财务系统或报表生成中。这个题目要求实现一个程序,能够读取输入的阿拉伯数字字符串,然后将其转换为符合中国会计规范的中文大写金额表示。...

    Java数字金额转大写

    将数字金额转换为大写汉字的java工具类,方便财务相关开发转换金额。

Global site tag (gtag.js) - Google Analytics