人民币小写金额转大写金额(java版)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
人民币小写金额转大写金额(java版)
代码说明:
1.最大支持百万亿(15位整数,2位小数) ;或仟万亿(16
位整数)
2. 超过最大支持仟万亿(16位整数),只输出大写数字
3. 整数部分越大,则小数部分输出越不精确
4. 负数,则忽略负号
代码:
1.原代码
import java.text.DecimalFormat;
/**小写转大写
* @author lily200825 2011-5-16
*
*/
public class RMB {
//输出日志
public static volatile boolean isDebug = false;
//阶值{仟万亿。。。仟,佰,拾,元}
public static final String[] unit = { "仟","佰","拾","万"
,"仟","佰","拾","亿"
,"仟","佰","拾","万"
,"仟" ,"佰","拾","元" };
// 数字表示
public static final char[] digit = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌','玖' };
/**
* 小写金额转大写金额
*
*
*
* @param amount
* @return 大写金额
*/
public static String number2UpperCase(double _amount){
double amount = Math.abs(_amount);
StringBuffer result = new StringBuffer();
/*
* -------- 整数部分--------
*/
StringBuffer result_intStr = new StringBuffer();
long num = (long)amount;
// 转成大写
String intStr = getUpperCase(num);
int len = intStr.length();
String regex_01 = "(零.)+";
String regex_00 = "(零)+";
String rep_str = "零";
char zero = '零';
if(len<=16){
// ====== 仟万亿======
int index = 0;
for(int i=16-len ; i<16; i++){
result_intStr.append(intStr.charAt(index++));
//加权值
result_intStr.append(unit[i]);
}
//加权后,未合并连续零
String temp_intStr = result_intStr.toString();
int temp_len = temp_intStr.length();
if(isDebug){
System.out.println("加权后未处理连续零,["+temp_intStr+"]。");
}
result_intStr = new StringBuffer();
if(len>=13){
//万亿,合并连续的零X ->
String str = temp_intStr.substring(0, temp_len-12*2).replaceAll(regex_01, rep_str);
result_intStr.append( str.charAt(str.length()-1) == zero ? str.substring(0, str.length()-1)+'万' : str);
}
if(len>=9){
//亿,合并连续的零X
int start = temp_len-12*2 < 0 ? 0 : temp_len-12*2 ;
String str = temp_intStr.substring(start , temp_len-8*2).replaceAll(regex_01, rep_str);
result_intStr.append( str.charAt(str.length()-1) == zero ? str.substring(0, str.length()-1)+'亿' : str);
}
if(len>=5){
//万,合并连续的零X
int start = temp_len-8*2 < 0 ? 0 : temp_len-8*2 ;
String str = temp_intStr.substring(start , temp_len-4*2).replaceAll(regex_01, rep_str);
result_intStr.append( str.charAt(str.length()-1) == zero ? str.substring(0, str.length()-1)+'万' : str);
}
if(len>=1){
//元,合并连续的零X
int start = temp_len-4*2 < 0 ? 0 : temp_len-4*2 ;
String str = temp_intStr.substring(start , temp_len).replaceAll(regex_01, rep_str);
result_intStr.append( str.charAt(str.length()-1) == zero ? str.substring(0, str.length()-1)+'元' : str);
}
//最后处理
String last_intStr = result_intStr.toString().replaceAll(regex_00, rep_str);
if(last_intStr.length()==1){
//元
last_intStr = zero+last_intStr;
result_intStr = new StringBuffer(last_intStr);
}else{
//XX亿万玖仟元-> XX亿零玖仟元
int w_index = last_stIndexOf('万');
if(len>=9 && w_index>0 && last_intStr.charAt(w_index-1)=='亿'){
last_intStr = last_intStr.substring(0, w_index) + zero +