- 浏览: 645950 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
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 3882方法 说明 Res ... -
URLClassLoader
2012-05-27 19:45 966This example shows how a serv ... -
MyClassLoader 自定义类加载器
2012-05-27 19:38 1480package demo; import java. ... -
Deal with big-endian and little-endian order
2011-12-25 19:17 1077Java virtual machine always use ... -
修改eclipse的背景色
2011-11-12 19:23 1086eclipse 操作界面默认颜色为白色。对于我们长期 ... -
多线程管道流输入输出模式
2011-11-07 07:23 1066import java.io.* ; class Send ... -
Java计数单字节双字节字符个数的例子
2011-10-26 14:29 1272/* 计数单双字符的个数并存储在Map对象中 ... -
常用内存数据库3
2011-10-24 00:24 14614.1.2 哪些场合适合使用其他的关系型数据库管 ... -
java字节码规则
2011-09-05 13:56 1226栈和局部变量操作 将常量压入栈的指令 aconst_nul ... -
Tomcat中限制ip访问
2011-08-23 21:40 1227Tomcat中限制ip访问是非常简单的,只需要编辑server ... -
一个Java程序员应该掌握的10项技能
2011-08-22 10:27 5971、语法:必须比较熟 ... -
2011 年 8 月 Java 开发人员新闻快讯
2011-08-18 18:59 805Java SE 7 发布了! 经过世界各地 Ja ... -
BlockingQueue
2011-08-13 09:59 688import java.util.concurrent.Arr ... -
eclipse中java项目转换为web项目
2011-07-27 18:29 875经常在eclipse中导入web项目时,出现转不了项目类型 ... -
Oracle官方Weblogic插件安装
2011-07-20 22:00 2843Installing Oracle Enterprise Pa ... -
Java集合HashSet-ArrayList-HashMap的线程同步控制方法和区别
2011-06-21 17:44 2283C ollections类中提供了多 ... -
关于java的集合类,以及HashMap中Set的用法
2011-06-21 17:35 1766import java.util.*; public c ... -
Java的动态代理实例
2011-06-16 03:44 1031首先写一个接口: package net.test.dyna ... -
Java如何调用可执行文件和批处理命令
2011-06-07 00:58 2284Java是种跨平台的语言,我们经常碰到需要通过Java调用wi ... -
jsp实现图片验证码的方法
2011-06-07 00:57 1367调用方法 <img src=&quo ...
相关推荐
输入字符,通过正则验证是否为金额不超过万亿精确到小数点后两位,然后将数字转换为大写 包括后台java正则验证及前台js验证 请输入一个数字(精确到小数点后两位): fdsa54325.54 fdsa54325.54 false 请输入一个...
Java人民币金额数字转换成大写,最常见的java面试题,最合理的解答。
主要为大家详细介绍了java实现数字转换人民币中文大写工具,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
用java代码 实现金额阿拉伯数字 转成 中文汉字大写形式
将数字转为中文金额的大写方式(Java版) 博文链接:https://lovinchan.iteye.com/blog/202768
将数字金额转换为大写汉字的java工具类,方便财务相关开发转换金额。
最好放在公共方法里,以便调用,定义String 类型接受返回的金额,调用参数为需要传入的金额
JAVA实现阿拉伯数字金额转汉语大写
用java实现将阿拉伯数字转换为金额的汉字大写
可以把金额数值转为财务上常用的金额大写,如100元 转为壹佰园
小数都可以,这个真不错,赶紧下载来看看吧
阿拉伯数字转大写金额+大写金额转阿拉伯数字阿拉伯数字转大写金额+大写金额转阿拉伯数字
1. 最大支持百万亿(15位整数,2位小数) ;或仟万亿(16位整数) 2. 超过最大支持仟万亿(16位整数),只输出大写数字 3. 整数部分越大,则小数部分输出越不精确 4. 负数,则忽略负号
主要为大家详细介绍了Java将数字金额转为大写中文金额,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
将阿拉伯数字金额转成中文大写 "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"......
金额转换,中文金额转数字金额,数字金额转中文金额,中文金额转数字金额从字符串中获取中文大写金额或是数字金额,不支持小数,中文金额不支持混写,如 五千零壹十万元,不支持转换会输出0,字符串可以不用截取,...
NULL 博文链接:https://ziyan-999.iteye.com/blog/751329
Java语言实现的,将数字金额转换为人民币大写金额的例子,没有对输入数字进行校验,小数点后只保留两位,支持千分符。最大金额范围为千亿。
这段代码主要是解决一些在写EXCEL或者其他文件的时候,里面有金额或者其他的数字需要转换成大写
* 返回关于钱的中文式大写数字,支仅持到亿 * */ public static String arabNumToChineseRMB(int moneyNum){ String res=""; int i=3; if(moneyNum==0) return "零元"; while(moneyNum>0){ res=ChineseUnit...