## java 金额数字转换大写算法 转

o
osc_fhl05ph9

``````public class MoneyToChiness{
public static void main(String[] args) {
long l = System.currentTimeMillis();
System.out.println(MoneyToChiness.moneyToChinese(new BigDecimal("999999999999.99")));
System.out.println(System.currentTimeMillis()-l);
}
public static String moneyToChinese(BigDecimal i_money) {
if(i_money.equals(BigDecimal.ZERO)){
return "零圆整";
}
Double max = 1000000000000D;
Double min = 0.01D;
if (i_money.doubleValue() >= max  || i_money.doubleValue() < min) {
return "大于1万亿或小于1分了";
}
i_money = i_money.setScale(2, RoundingMode.HALF_UP);
String numStr = i_money.toString();
int pointPos = numStr.indexOf('.');
//整数部分
String s_int = null;
//小数部分
String s_point = null;
if (pointPos >= 0) {
s_int = numStr.substring(0, pointPos);
s_point = numStr.substring(pointPos + 1);
} else {
s_int = numStr;
}
StringBuilder sb = new StringBuilder();
if(!"0".equals(s_int)){
int groupCount = (int) Math.ceil(s_int.length() / 4.0);
for (int group = 0; group < groupCount; group++) {
boolean zeroFlag = true;
boolean noZeroFlag = false;
int start = (s_int.length() % 4 == 0 ? 0 : (s_int.length() % 4 - 4)) + 4 * group;
for (int i = 0; i < 4; i++) {
if (i + start >= 0) {
int value = s_int.charAt(i + start) - '0';
if (value > 0) {
sb.append(CN_UPPER_NUMBER[value]);
if (i < 3) {
sb.append(CN_UPPER_UNIT[i]);
}
zeroFlag = true;
noZeroFlag = true;
} else if (zeroFlag) {
sb.append('零');
zeroFlag = false;
}
}
}
if(sb.charAt(sb.length() - 1) == '零'){
sb.deleteCharAt(sb.length() - 1);
}
if(noZeroFlag || groupCount - group == 1){
sb.append(CN_GROUP[groupCount - group - 1]);
}
}
}
if (s_point == null || "00".equals(s_point)) {
sb.append('整');
}else{
int j = s_point.charAt(0) - '0';
int f = s_point.charAt(1) - '0';
if(j > 0){
sb.append(CN_UPPER_NUMBER[j]).append('角');
if(f != 0){
sb.append(CN_UPPER_NUMBER[f]).append('分');
}
}else if("0".equals(s_int)){
sb.append(CN_UPPER_NUMBER[f]).append('分');
}else {
sb.append('零').append(CN_UPPER_NUMBER[f]).append('分');
}
}
return sb.toString();
}

private static final char[] CN_UPPER_NUMBER = "零壹贰叁肆伍陆柒捌玖".toCharArray();
private static final char[] CN_UPPER_UNIT = "仟佰拾".toCharArray();
private static final char[] CN_GROUP = "圆万亿".toCharArray();
}
``````

o

### osc_fhl05ph9

2013/01/24
4.5K
1

Codgen是一个基于数据库元数据模型，使用freemarker模板引擎来构建输出的代码生成器。freemarker的数据模型结构通常来说都是一个Map树状结构模型，codgen也不例外，它的数据模型这棵树的根节...

2013/01/29
1.4W
2

Jikes研究虚拟机（Jikes Research Virtual Machine,简称Jikes RVM)是一种成熟的用于执行Java程序的虚拟机，其早期版本与当前版本分别在通用公共许可证（CPL）与Eclipse公共许可证（EPL）下开...

2013/02/13
1.1K
0
Swing界面分析和调试工具--Swing Inspector

Swing Inspector是一个Java Swing/AWT用户界面分析和调试工具，功能与firebug类似，具有强大的Swing/AWT用户界面分析和调试相关功能。 适用于从java swing初级到高级的所有开发人员，能够快速...

2013/03/06
3.4K
0

Raw-OS 起飞于2012年，Raw-OS志在制作中国人自己的最优秀硬实时操作系统。 Raw-OS 操作系统特性 内核最大关中断时间无限接近0us, s3c2440系统最大关中断时间实测0.8us。 支持idle任务级别的事...

jorya_txj
2013/03/19
6.3K
1

Trends期刊8月中国论文合辑

11
0
C语言哈希表uthash的使用方法详解（附下载链接）

osc_h7zc4umy
27分钟前
7
0
CGB2004-京淘项目Day08

1.实现图片回显 1.1准备虚拟路径 1.1.1 编辑image.properties 说明:在jt-manager中创建image.properties文件,在其中编辑关于图片配置的所有信息. 1.1.2 编辑FileServiceImpl 说明:实现虚拟路...

osc_gp8avabl
28分钟前
15
0
C++核心准则​E.28:避免基于全局状态的错误处理(例如errno)

16
0

osc_8kei32r9
30分钟前
5
0