- 浏览: 659656 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
HkEndless:
不好意思,请问这确定是回调机制吗。你的例子中只是将接口的实现类 ...
Spring CallBack回调机制介绍 -
hanmiao:
写的真乱啊,完全不知所云...
Java如何调用可执行文件和批处理命令 -
junia_1:
junia_1 写道 shock: ...
为什么要使用EJB -
junia_1:
shock:
为什么要使用EJB -
coollifer:
不错
SQL Server数据导入到Oracle中的方法
处理能力:
整数部分:9999999999999999(16位长,仟万亿)
小数部分:3位,多于3位舍去(不做四舍五入)
运行结果:
1.23 壹元贰角叁分
1234567890123456.123 壹仟贰佰叁拾肆万伍仟陆佰柒拾捌亿玖仟零壹拾贰万叁仟肆佰伍拾陆元壹角贰分叁厘
0.0798 柒分玖厘
10,001,000.09 壹仟万零壹仟元玖分
01.107700 壹元壹角柒厘
public
class
MoneyUtil {
/** 大写数字 */
private static final String[] NUMBERS = { " 零 " , " 壹 " , " 贰 " , " 叁 " , " 肆 " , " 伍 " , " 陆 " ,
" 柒 " , " 捌 " , " 玖 " };
/** 整数部分的单位 */
private static final String[] IUNIT = { " 元 " , " 拾 " , " 佰 " , " 仟 " , " 万 " , " 拾 " , " 佰 " ,
" 仟 " , " 亿 " , " 拾 " , " 佰 " , " 仟 " , " 万 " , " 拾 " , " 佰 " , " 仟 " };
/** 小数部分的单位 */
private static final String[] DUNIT = { " 角 " , " 分 " , " 厘 " };
/**
* 得到大写金额。
*/
public static String toChinese(String str) {
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 = "" ;
}
// integerStr去掉首0,不必去掉decimalStr的尾0(超出部分舍去)
if ( ! integerStr.equals( "" )) {
integerStr = Long.toString(Long.parseLong(integerStr));
if (integerStr.equals( " 0 " )) {
integerStr = "" ;
}
}
// overflow超出处理能力,直接返回
if (integerStr.length() > IUNIT.length) {
System.out.println(str + " :超出处理能力 " );
return str;
}
int [] integers = toArray(integerStr); // 整数部分数字
boolean isMust5 = isMust5(integerStr); // 设置万单位
int [] decimals = toArray(decimalStr); // 小数部分数字
return getChineseInteger(integers, isMust5) + getChineseDecimal(decimals);
}
/**
* 整数部分和小数部分转换为数组,从高位至低位
*/
private static int [] toArray(String number) {
int [] array = new int [number.length()];
for ( int i = 0 ; i < number.length(); i ++ ) {
array[i] = Integer.parseInt(number.substring(i, i + 1 ));
}
return array;
}
/**
* 得到中文金额的整数部分。
*/
private static String getChineseInteger( int [] integers, boolean isMust5) {
StringBuffer chineseInteger = new StringBuffer( "" );
int length = integers.length;
for ( int i = 0 ; i < length; i ++ ) {
// 0出现在关键位置:1234(万)5678(亿)9012(万)3456(元)
// 特殊情况:10(拾元、壹拾元、壹拾万元、拾万元)
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 && isMust5) // 万(不必填)
key = IUNIT[ 4 ];
else if ((length - i) == 1 ) // 元(必填)
key = IUNIT[ 0 ];
// 0遇非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();
}
/**
* 得到中文金额的小数部分。
*/
private static String getChineseDecimal( int [] decimals) {
StringBuffer chineseDecimal = new StringBuffer( "" );
for ( int i = 0 ; i < decimals.length; i ++ ) {
// 舍去3位小数之后的
if (i == 3 )
break ;
chineseDecimal.append(decimals[i] == 0 ? ""
: (NUMBERS[decimals[i]] + DUNIT[i]));
}
return chineseDecimal.toString();
}
/**
* 判断第5位数字的单位"万"是否应加。
*/
private static boolean isMust5(String integerStr) {
int length = integerStr.length();
if (length > 4 ) {
String subInteger = "" ;
if (length > 8 ) {
// 取得从低位数,第5到第8位的字串
subInteger = integerStr.substring(length - 8 , length - 4 );
} else {
subInteger = integerStr.substring( 0 , length - 4 );
}
return Integer.parseInt(subInteger) > 0 ;
} else {
return false ;
}
}
public static void main(String[] args) {
String number = " 1.23 " ;
System.out.println(number + " " + MoneyUtil.toChinese(number));
number = " 1234567890123456.123 " ;
System.out.println(number + " " + MoneyUtil.toChinese(number));
number = " 0.0798 " ;
System.out.println(number + " " + MoneyUtil.toChinese(number));
number = " 10,001,000.09 " ;
System.out.println(number + " " + MoneyUtil.toChinese(number));
number = " 01.107700 " ;
System.out.println(number + " " + MoneyUtil.toChinese(number));
}
}
/** 大写数字 */
private static final String[] NUMBERS = { " 零 " , " 壹 " , " 贰 " , " 叁 " , " 肆 " , " 伍 " , " 陆 " ,
" 柒 " , " 捌 " , " 玖 " };
/** 整数部分的单位 */
private static final String[] IUNIT = { " 元 " , " 拾 " , " 佰 " , " 仟 " , " 万 " , " 拾 " , " 佰 " ,
" 仟 " , " 亿 " , " 拾 " , " 佰 " , " 仟 " , " 万 " , " 拾 " , " 佰 " , " 仟 " };
/** 小数部分的单位 */
private static final String[] DUNIT = { " 角 " , " 分 " , " 厘 " };
/**
* 得到大写金额。
*/
public static String toChinese(String str) {
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 = "" ;
}
// integerStr去掉首0,不必去掉decimalStr的尾0(超出部分舍去)
if ( ! integerStr.equals( "" )) {
integerStr = Long.toString(Long.parseLong(integerStr));
if (integerStr.equals( " 0 " )) {
integerStr = "" ;
}
}
// overflow超出处理能力,直接返回
if (integerStr.length() > IUNIT.length) {
System.out.println(str + " :超出处理能力 " );
return str;
}
int [] integers = toArray(integerStr); // 整数部分数字
boolean isMust5 = isMust5(integerStr); // 设置万单位
int [] decimals = toArray(decimalStr); // 小数部分数字
return getChineseInteger(integers, isMust5) + getChineseDecimal(decimals);
}
/**
* 整数部分和小数部分转换为数组,从高位至低位
*/
private static int [] toArray(String number) {
int [] array = new int [number.length()];
for ( int i = 0 ; i < number.length(); i ++ ) {
array[i] = Integer.parseInt(number.substring(i, i + 1 ));
}
return array;
}
/**
* 得到中文金额的整数部分。
*/
private static String getChineseInteger( int [] integers, boolean isMust5) {
StringBuffer chineseInteger = new StringBuffer( "" );
int length = integers.length;
for ( int i = 0 ; i < length; i ++ ) {
// 0出现在关键位置:1234(万)5678(亿)9012(万)3456(元)
// 特殊情况:10(拾元、壹拾元、壹拾万元、拾万元)
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 && isMust5) // 万(不必填)
key = IUNIT[ 4 ];
else if ((length - i) == 1 ) // 元(必填)
key = IUNIT[ 0 ];
// 0遇非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();
}
/**
* 得到中文金额的小数部分。
*/
private static String getChineseDecimal( int [] decimals) {
StringBuffer chineseDecimal = new StringBuffer( "" );
for ( int i = 0 ; i < decimals.length; i ++ ) {
// 舍去3位小数之后的
if (i == 3 )
break ;
chineseDecimal.append(decimals[i] == 0 ? ""
: (NUMBERS[decimals[i]] + DUNIT[i]));
}
return chineseDecimal.toString();
}
/**
* 判断第5位数字的单位"万"是否应加。
*/
private static boolean isMust5(String integerStr) {
int length = integerStr.length();
if (length > 4 ) {
String subInteger = "" ;
if (length > 8 ) {
// 取得从低位数,第5到第8位的字串
subInteger = integerStr.substring(length - 8 , length - 4 );
} else {
subInteger = integerStr.substring( 0 , length - 4 );
}
return Integer.parseInt(subInteger) > 0 ;
} else {
return false ;
}
}
public static void main(String[] args) {
String number = " 1.23 " ;
System.out.println(number + " " + MoneyUtil.toChinese(number));
number = " 1234567890123456.123 " ;
System.out.println(number + " " + MoneyUtil.toChinese(number));
number = " 0.0798 " ;
System.out.println(number + " " + MoneyUtil.toChinese(number));
number = " 10,001,000.09 " ;
System.out.println(number + " " + MoneyUtil.toChinese(number));
number = " 01.107700 " ;
System.out.println(number + " " + MoneyUtil.toChinese(number));
}
}
发表评论
-
hibernate Restrictions用法 MatchMode.ANYWHERE
2012-07-14 15:50 3971方法 说明 Res ... -
URLClassLoader
2012-05-27 19:45 999This example shows how a serv ... -
MyClassLoader 自定义类加载器
2012-05-27 19:38 1525package demo; import java. ... -
Deal with big-endian and little-endian order
2011-12-25 19:17 1120Java virtual machine always use ... -
修改eclipse的背景色
2011-11-12 19:23 1115eclipse 操作界面默认颜色为白色。对于我们长期 ... -
多线程管道流输入输出模式
2011-11-07 07:23 1093import java.io.* ; class Send ... -
Java计数单字节双字节字符个数的例子
2011-10-26 14:29 1295/* 计数单双字符的个数并存储在Map对象中 ... -
常用内存数据库3
2011-10-24 00:24 15204.1.2 哪些场合适合使用其他的关系型数据库管 ... -
java字节码规则
2011-09-05 13:56 1254栈和局部变量操作 将常量压入栈的指令 aconst_nul ... -
Tomcat中限制ip访问
2011-08-23 21:40 1275Tomcat中限制ip访问是非常简单的,只需要编辑server ... -
一个Java程序员应该掌握的10项技能
2011-08-22 10:27 6221、语法:必须比较熟 ... -
2011 年 8 月 Java 开发人员新闻快讯
2011-08-18 18:59 838Java SE 7 发布了! 经过世界各地 Ja ... -
BlockingQueue
2011-08-13 09:59 719import java.util.concurrent.Arr ... -
eclipse中java项目转换为web项目
2011-07-27 18:29 899经常在eclipse中导入web项目时,出现转不了项目类型 ... -
Oracle官方Weblogic插件安装
2011-07-20 22:00 2882Installing Oracle Enterprise Pa ... -
Java集合HashSet-ArrayList-HashMap的线程同步控制方法和区别
2011-06-21 17:44 2322C ollections类中提供了多 ... -
关于java的集合类,以及HashMap中Set的用法
2011-06-21 17:35 1807import java.util.*; public c ... -
Java的动态代理实例
2011-06-16 03:44 1058首先写一个接口: package net.test.dyna ... -
Java如何调用可执行文件和批处理命令
2011-06-07 00:58 2351Java是种跨平台的语言,我们经常碰到需要通过Java调用wi ... -
jsp实现图片验证码的方法
2011-06-07 00:57 1394调用方法 <img src=&quo ...
相关推荐
在 Java 中,将人民币金额数字转换成大写需要使用 HashMap 来存储中文数字和人民币金额的对应关系。例如,数字 1 对应中文数字 "壹",数字 2 对应中文数字 "贰",以此类推。 在 SimpleMoneyFormat 类中,我们首先...
Java 中实现数字金额到中文大写字符的转换 Java 中实现数字金额到中文大写字符的转换是指将阿拉伯数字转换成中文大写的过程。本文将详细介绍 Java 实现数字金额到中文大写字符的转换的知识点。 知识点一: 数字...
Java 实现数字转换人民币中文大写工具 Java 实现数字转换人民币中文大写工具是指使用 Java 语言将数字转换为人民币中文大写格式的工具。该工具具有很高的实用价值,特别是在人事业务系统开发中,经常需要将数字转换...
输入字符,通过正则验证是否为金额不超过万亿精确到小数点后两位,然后将数字转换为大写 包括后台java正则验证及前台js验证 请输入一个数字(精确到小数点后两位): fdsa54325.54 fdsa54325.54 false 请输入一个...
"JAVA实现阿拉伯数字金额转汉语大写" JAVA实现阿拉伯数字金额转汉语大写是指使用JAVA语言将阿拉伯数字金额转换为汉语大写格式的过程。该过程主要涉及到数字金额的处理和汉语大写格式的转换。 在该过程中,需要定义...
将数字转为中文金额的大写方式(Java版) 博文链接:https://lovinchan.iteye.com/blog/202768
将数字金额转换为大写汉字的java工具类,方便财务相关开发转换金额。
在Java编程中,将金额的阿拉伯数字转换为中文汉字大写是常见的财务处理需求,主要用于防止数字篡改,增加财务数据的安全性和准确性。这个过程通常称为金额数字化,它涉及到将小数点、整数和小数部分分别转换,并且...
Java 类金额转换成大写 在 Java 编程语言中,金额转换成大写是非常有用的功能,特别是在财务、银行、电子商务等领域中。下面我们来详细介绍如何使用 Java 实现金额转换成大写的功能。 实例代码分析 首先,我们来...
本文将深入探讨如何在Android环境中实现这一功能,包括数字转中文以及数字金额转大写,并且会涉及到口语化的转换。 首先,数字转中文主要是将阿拉伯数字(如1、2、3等)转换成中文数字(如一、二、三等)。在Java或...
最好放在公共方法里,以便调用,定义String 类型接受返回的金额,调用参数为需要传入的金额
### 人民币小写金额转大写金额(Java版) #### 概述 本文将详细介绍一个Java程序,该程序用于将小写的人民币金额转换为大写形式。此转换主要用于财务、会计和其他正式场合,在这些场合中,大写金额是标准且必须的...
可以把金额数值转为财务上常用的金额大写,如100元 转为壹佰园
本文将深入探讨如何使用Java来实现阿拉伯数字到金额汉字大写的转换。 首先,我们需要了解金额汉字大写的基本规则。在中国,金额的汉字大写有特定的规则,例如1到10的汉字大写分别是壹、贰、叁、肆、伍、陆、柒、捌...
小数都可以,这个真不错,赶紧下载来看看吧
通过理解数字到大写汉字的映射规则,以及编写相应的转换函数,我们可以实现符合财务规范的金额显示。而`GetAmount.java`文件提供了一个实现这一功能的起点,开发者可以根据实际需求对其进行扩展和完善。
在Java编程中,将阿拉伯数字转换为大写金额以及将大写金额转换回阿拉伯数字是常见的财务处理需求。这些操作通常用于财务报表、发票或银行系统中,以确保数据的准确性和一致性。以下是对这个主题的详细解释: 一、...
Java程序实现数字金额转为大写中文金额,是一项常见的编程任务,尤其在金融行业以及需要处理财务数据的软件中应用广泛。其核心功能是将阿拉伯数字表示的金额转换成中文大写形式,以满足财务凭证、支票、合同等文档中...
通过这样的Java实现,我们能够轻松地将金额数字转换为大写汉字,满足各种财务报表和数据处理的需求。当然,实际的项目中还可能需要考虑性能优化,特别是对于大数据量的转换,可以考虑使用流式处理或者多线程等技术来...
- 使用`+`运算符将构建好的字符串拼接起来,形成最终的大写中文金额。 5. **异常处理与用户交互**: - 如果用户输入的数值超出规定范围,程序会提示用户重新输入,体现了错误处理和用户交互的机制。 6. **字符串...