java實現人民幣數字轉換大寫2個類

來源:互聯網
上載者:User

方法一,java實現人民幣數字轉換成中文大寫價格

 代碼如下 複製代碼


package xwcms.net.service;
import java.util.HashMap;
/**
 * 數字金額轉換成中文大寫金額
 * @author ftpeng
 *
 */
public class test {
    /**
     * 人民幣大寫單位制
     */
    private static HashMap<Integer, String> dws;
    /**
     * 數字對應的中文
     */
    private static String[] jes;
    // 初始化執行
    static{
        dws = new HashMap<Integer, String>();
        dws.put(-2, "分");
        dws.put(-1, "角");
        dws.put(0, "元");
        dws.put(1, "拾");
        dws.put(2, "佰");
        dws.put(3, "仟");
        dws.put(4, "萬");//
        dws.put(5, "拾");
        dws.put(6, "佰");
        dws.put(7, "仟");
        dws.put(8, "億");//
        dws.put(9, "拾");
        dws.put(10, "佰");
        dws.put(11, "仟");
        dws.put(12, "萬");
        jes = new String[]{"零","壹","貳","三","肆","伍","陸","柒","捌","玖"};
    }
    /**
     * 數字轉換人民幣大寫
     * @param number 數字 不支援科學數字
     * @return
     */
    public static String chinese(String number){
        StringBuffer su = new StringBuffer();
        // 整數部分
        number = delInvalidZero(number);
        String str = null;
        // 小數部分
        String decimal = null;
        if(number.contains(".")){
            // 截取整數位
            str = number.split("\.")[0];
            decimal = number.split("\.")[1];
        }else{
            str = number;
        }
        // 判斷是否存在整數位
        if(str.length()>0){
            for (int i = 0; i < str.length() ; i++) {
                String context = str.substring(i, i+1);
                int pow = str.length()-i-1;
                Integer val = Integer.parseInt(context.toString());
                // 擷取中文單位
                String sign = dws.get(pow);
                // 擷取中文數字
                String name = jes[Integer.parseInt(context)];
                if(val==0){
                    if(pow%4!=0){// 刪除單位
                        sign = "";
                    }
                    if(i < str.length()-1){
                        Integer val1 = Integer.parseInt(str.substring(i+1, i+2));
                        if(val==0&&val==val1){
                            name = "";
                        }
                    }else if(i == str.length()-1){
                        name = "";
                    }
                }
                su.append(name+sign);
            }
        }
        // 判斷是否存在小數位
        if(decimal!=null){
            str = decimal.substring(0,1);
            if(!"0".equals(str)){
                su.append(jes[Integer.parseInt(str)]+dws.get(-1));
            }
            if(decimal.length()==2){
                str = decimal.substring(1,2);
                if(!"0".equals(str)){
                    su.append(jes[Integer.parseInt(str)]+dws.get(-2));
                }
            }
        }else{
            su.append("整");
        }
        return su.toString();
    }
    /**
     * 清理數字特殊字元
     * @param str
     * @return
     */
    private static String delInvalidZero(String str){
        if("0".equals(str.substring(0, 1))){
            return delInvalidZero(str.substring(1, str.length()));
        }else if(str.contains(",")){
            return delInvalidZero(str.replaceAll(",", ""));
        }else{
            return str;
        }
    }
    public static void main(String[] args) {
        System.out.println(test.chinese("12.5"));
    }
}

方法二,

 

 代碼如下 複製代碼

package test;


import java.text.DecimalFormat;


public class Test {
private static final String digit_0 = "零壹貳三肆伍陸柒捌玖";
private static final String digit_1 = "零一二三四五六七八九";
private static final String[] digit_2 = { "", "十", "百", "千" };
private static final String[] digit_3 = { "", "拾", "佰", "仟" };
private static final String[] digit_4 = { "", "萬", "億", "萬億", "億億" };


/**
* @param args
*/
public static void main(String[] args) {
System.out.println(changeDigit("2012.12", false));
System.out.println(changeDigit("210.12", true));
System.out.println(changeNumberRMB(210.12));
}


/**
* Description: 數字轉化成整數
* @param str
* @param bo
* @return
*/
public static String changeDigit(String str, boolean bo) {
StringBuffer strbu = new StringBuffer();
int dou = str.indexOf(".");
// :判斷是否為小數還是整數,長度小於零為整數
if (dou < 0) {
dou = str.length();
}
// :擷取整數部分
String inter = str.substring(0, dou);
strbu.append(changeInteger(Long.parseLong(inter), bo));
// :處理小數部分
if (dou != str.length()) {
strbu.append("點");
// :擷取小數點後所有數
String xh = str.substring(dou + 1);
for (int i = 0; i < xh.length(); i++) {
if (bo) {
strbu.append(digit_0.charAt(Integer.parseInt(xh.substring(
i, i + 1))));
} else {
strbu.append(digit_1.charAt(Integer.parseInt(xh.substring(
i, i + 1))));
}
}
}
String strs = strbu.toString();
// :處理特殊情況,可能不全
if (strs.startsWith("零")) {
strs = strs.substring(1);
}
if (strs.startsWith("一十")) {
strs = strs.substring(1);
}
while (strs.endsWith("零")) {
strs = strs.substring(0, strs.length() - 1);
}
if (strs.startsWith("點")) {
strs = "零" + strs;
}
if (strs.endsWith("點")) {
strs = strs.substring(0, strs.length() - 1);
}
return strs;
}


/**
* 位元小於4時,調用處理資料

* @param str
* @param bo
* @return
*/
public static String readNumber(String str, boolean bo) {
StringBuffer strbu = new StringBuffer();
if (str.length() != 4) {
return null;
}
for (int i = 0; i < 4; i++) {
char ch = str.charAt(i);
if (ch == '0' && i > 1 && str.charAt(i - 1) == '0') {
continue;
}
if (ch != '0' && i > 1 && str.charAt(i - 1) == '0') {
strbu.append('零');
}
if (ch != '0') {
if (bo) {
strbu.append(digit_0.charAt(ch - 48));
strbu.append(digit_3[4 - i - 1]);
} else {
strbu.append(digit_1.charAt(ch - 48));
strbu.append(digit_2[4 - i - 1]);
}
}
}
return strbu.toString();
}


/**
* 整數部分轉換大寫

* @param lon
* @param bo
* @return
*/
public static String changeInteger(long lon, boolean bo) {
StringBuffer strbu = new StringBuffer();
// :增加3位元,為了完成大寫轉換
String strN = "000" + lon;
int strN_L = strN.length() / 4;
// :根據不同的位元長度,消除strN"0"的個數
strN = strN.substring(strN.length() - strN_L * 4);
for (int i = 0; i < strN_L; i++) {
String s1 = strN.substring(i * 4, i * 4 + 4);
String s2 = readNumber(s1, bo);
strbu.append(s2);
if (s2.length() != 0) {
strbu.append(digit_4[strN_L - i - 1]);
}
}
String s = new String(strbu);
if (s.length() != 0 && s.startsWith("零"))
s = s.substring(1);
return s;
}


/**
* 人名幣輸出格式

* @param rmb
* @return
*/
public static String changeNumberRMB(double rmb) {
String strRMB = "" + rmb;
DecimalFormat df = new DecimalFormat("#.#");
df.setMaximumFractionDigits(2);
strRMB = df.format(rmb).toString();
// :true人民幣大寫,並返回資料
strRMB = changeDigit(strRMB, true);
if (strRMB.indexOf("點") >= 0) {
strRMB = strRMB + "零";
strRMB = strRMB.replaceAll("點", "圓");
String str1 = strRMB.substring(0, strRMB.indexOf("圓") + 1);
String str2 = strRMB.substring(strRMB.indexOf("圓") + 1);
strRMB = str1 + str2.charAt(0) + "角" + str2.charAt(1) + "分整";
} else {
strRMB = strRMB + "圓整";
}
return "人民幣(大寫):" + strRMB;
}


}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.