java金额转中文大写详解编程语言

import java.math.BigDecimal; 
import java.text.DecimalFormat; 
 
public class ChinaNumber 
{ 
 
    private static String[] CH = { "", "", "拾", "佰", "仟" }; 
 
    private static String[] CHS_NUMBER = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; 
 
    private static String[] CHS = { "万", "亿", "兆" }; 
 
    private static DecimalFormat df = new DecimalFormat("#########################0.0#"); 
 
    /** 
     * 传入数字金额双精度型值,返回数字金额对应的中文大字与读法 
     *  
     * @param money 
     *            金额 
     * @return 金额中文大写 
     */ 
    public static String transFormMoney(double money) 
    { 
        return transFormMoney(df.format(money)); 
    } 
 
    /** 
     * 传入数字金额浮点型值,返回数字金额对应的中文大字与读法 
     *  
     * @param money 
     *            金额 
     * @return 金额中文大写 
     */ 
    public static String transFormMoney(float money) 
    { 
        return transFormMoney(df.format(money)); 
    } 
 
    /** 
     * 传入数字金额字符串,返回数字金额对应的中文大字与读法 
     *  
     * @param money 
     *            金额字符串 
     * @return 金额中文大写 
     */ 
    public static String transFormMoney(String money) 
    { 
        String result = ""; 
 
        try 
        { 
            BigDecimal big = new BigDecimal(money); 
            String[] t = null; 
            try 
            { 
                t = big.toString().replace(".", ";").split(";"); 
            } catch (Exception e) 
            { 
                // 金额如果没有小数位时,也要加上小数位 
                t = (big.toString() + ".0").replace(".", ";").split(";"); 
            } 
 
            String[] intString = splitMoney(t[0]); 
            String tmp_down = t[1]; 
 
            for (int i = 0; i < intString.length; i++) 
            { 
                result = result + count(intString[i]); 
 
                if (i == intString.length - 2 || i == intString.length - 3 ) 
                    continue; 
 
                if (i != intString.length - 1) 
                { 
                    result = result + CHS[intString.length - 2 - i]; 
                } 
            } 
 
            if (Integer.parseInt(tmp_down) == 0) 
            { 
                result = result + (intString[0].equals("0") ? "零元" : "元整"); 
            } else 
            { 
                result = result + (intString[0].equals("0") ? "" : tmp_down.startsWith("0") ? "元零" : "元") 
                        + getFloat(tmp_down); 
            } 
 
        } catch (Exception e) 
        { 
            return "你輸入的不是數字符串"; 
        } 
 
        return result; 
    } 
 
    /** 
     * 对整数部分字符串进行每四位分割放置分割符 
     *  
     * @param money 
     *            整数部分字符串 
     * @return 放置分割符后的字符串 
     */ 
    public static String[] splitMoney(String money) 
    { 
        StringBuffer tmp_int = new StringBuffer(); 
        tmp_int.append(money); 
 
        // 先對整數位進行分割,每四位爲一組。 
        int i = tmp_int.length(); 
 
        do 
        { 
            try 
            { 
                // 進行try..catch是因爲當位數不能滿足每四位放分割符時,就退出循環 
                i = i - 4; 
 
                if (i == 0) 
                    break; 
 
                tmp_int.insert(i, ';'); 
 
            } catch (Exception e) 
            { 
                break; 
            } 
        } while (true); 
 
        return tmp_int.toString().split(";"); 
    } 
 
    /** 
     * 转换整数部分 
     *  
     * @param money 
     *            整数部分金额 
     * @return 整数部分大写 
     */ 
    public static String count(String money) 
    { 
        String tmp = ""; 
        Integer money_int = 0; 
        char[] money_char; 
 
        // 如果數字開始是零時 
        if (money.startsWith("0")) 
        { 
            money_int = Integer.parseInt(money); 
 
            if (money_int == 0) 
                return tmp; 
            else 
                tmp = "零"; 
 
            money_char = money_int.toString().toCharArray(); 
        } else 
        { 
            money_char = money.toCharArray(); 
        } 
 
        for (int i = 0; i < money_char.length; i++) 
        { 
            if (money_char[i] != '0') 
            { 
                // 如果當前位不爲“0”,才可以進行數字和位數轉換 
                tmp = tmp + CHS_NUMBER[Integer.parseInt(money_char[i] + "")] + CH[money_char.length - i]; 
            } else 
            { 
                // 要想該位轉換爲零,要滿足三個條件 
                // 1.上一位沒有轉換成零,2.該位不是最後一位,3.該位的下一位不能爲零 
                if (!tmp.endsWith("零") && i != money_char.length - 1 && money_char[i + 1] != '0') 
                { 
                    tmp = tmp + CHS_NUMBER[Integer.parseInt(money_char[i] + "")]; 
                } 
            } 
        } 
 
        return tmp; 
    } 
 
    /** 
     * 转换小数部分 
     *  
     * @param fl 
     *            小数 
     * @return 小数大写 
     */ 
    private static String getFloat(String fl) 
    { 
        String f = ""; 
        char[] ch = fl.toCharArray(); 
 
        switch (ch.length) 
        { 
        case 1: 
        { 
            f = f + CHS_NUMBER[Integer.parseInt(ch[0] + "")] + "角整"; 
            break; 
        } 
 
        case 2: 
        { 
            if (ch[0] != '0') 
                f = f + CHS_NUMBER[Integer.parseInt(ch[0] + "")] + "角" 
                        + CHS_NUMBER[Integer.parseInt(ch[1] + "")] + "分"; 
            else 
                f = f + CHS_NUMBER[Integer.parseInt(ch[1] + "")] + "分"; 
 
            break; 
        } 
        } 
        return f; 
    } 
 
    public static void main(String[] args) 
    { 
        System.out.println(transFormMoney(1000000000000.0232)); 
        System.out.println(transFormMoney(18493847575.0232)); 
        System.out.println(transFormMoney(1844237575.02f)); 
        System.out.println(transFormMoney("18493475.02")); 
        System.out.println(transFormMoney("0.02")); 
        System.out.println(transFormMoney("0.2")); 
    } 
}

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/10839.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论