人民币小写金额转大写金额(java版)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

人民币小写金额转大写金额(java版)

代码说明:

1.最大支持百万亿(15位整数,2位小数) ;或仟万亿(16

位整数)

2. 超过最大支持仟万亿(16位整数),只输出大写数字

3. 整数部分越大,则小数部分输出越不精确

4. 负数,则忽略负号

代码:

1.原代码

import java.text.DecimalFormat;

/**小写转大写

* @author lily200825 2011-5-16

*

  • 最大支持仟万亿(16位整数,2位小数)
  • */

    public class RMB {

    //输出日志

    public static volatile boolean isDebug = false;

    //阶值{仟万亿。。。仟,佰,拾,元}

    public static final String[] unit = { "仟","佰","拾","万"

    ,"仟","佰","拾","亿"

    ,"仟","佰","拾","万"

    ,"仟" ,"佰","拾","元" };

    // 数字表示

    public static final char[] digit = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌','玖' };

    /**

    * 小写金额转大写金额

    *

  • 最大支持百万亿(15位整数,2位小数) ;或仟万亿(16位整数)
  • *

  • 超过最大支持仟万亿(16位整数),只输出大写数字
  • *
  • 整数部分越大,则小数部分输出越不精确
  • *

  • 负数,则忽略负号
  • * @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 +

    相关文档
    最新文档