欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

使用java代码将金额转换成大写,java代码金额大写,在很多地方都看到有金额大

来源: javaer 分享于  点击 45395 次 点评:80

使用java代码将金额转换成大写,java代码金额大写,在很多地方都看到有金额大


在很多地方都看到有金额大写转换的代码,附上以前自己写的一个,供各位消遣2012-06-18修正输入一个不带小数的整数,如“7521000”,后面的零被干掉了... 的bug2012-7-6修正 10100.03会得到壹萬零壹佰元零零叁分

[Java]代码

import java.util.Arrays;/** * 金额大写 * @author 0x0001 * */public class Je {    private static String[] num = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};    // 10进制单位    private static String[] dw = {"","拾","佰","仟"};    // 数值进度单位参考 http://www.douban.com/group/topic/5404723/   http://zhidao.baidu.com/question/51925487.html    // 1000进制单位    private static String[] dw2 = {"","萬","億","兆","京","垓","杼","穰","溝","澗","正","載","極","恆河沙","阿僧祇","那由他","不可思議","无量","大数"};    private static String[] dw1 = {"角","分"};    public static void main(String[] args) {        String test = "009900990000";        System.out.println(parse(test));    }    private static String parse(String str) {//      str = str.replaceAll("^(0+)(.*)", "$2").replaceAll("(.*?)(0+)$", "$1");//      if(str.indexOf(".") == 0) {//          str = "0"+str;//      }        // 判断是否为合格数字        if(str.matches("^\\d+(\\.\\d+)?\\d*$")) {            String integer = "";            String decimal = "";            // 拆分成整数和小数部分            int pos = str.indexOf(".");            if(pos >=0 ) {                integer = str.substring(0,pos);                decimal = str.substring(pos+1);                decimal = decimal.replaceAll("(.*?)(0+)$", "$1");            } else {                integer = str;            }            integer = integer.replaceAll("^(0+)(.*)", "$2");            if(integer.isEmpty() && !decimal.isEmpty()) {                integer = "0";            }            // 解析整数字符串            String intStr =  parseIntger(integer);            // 解析小数字符串            String decimalStr = parseDecimal(decimal,!intStr.isEmpty());            if(!intStr.isEmpty()) {                intStr += "元";                if(integer.endsWith("0") && !decimal.isEmpty() && !decimal.startsWith("0")){                    intStr+="零";                }            } else if(decimalStr.isEmpty()) {                intStr = "零元";            }            return intStr + (decimalStr.isEmpty()?"整":decimalStr);        }        throw new IllegalArgumentException(str);    }    /**     * 解析整数 规则为:     *  将字符串从后往前分割成四个字符一组的字符串二维数组(对应1000进制单位)     *  分别解析每个数组为10进制单位中对应的字符串     *  合并到一起则为整个字符串     * @param str     * @return     */    private static String parseIntger(String str) {        if(null == str || str.isEmpty()) {            return "";        }        // 分割字符串为四个字符一组的字符串二维数组        char[][] nums = spit(str.toCharArray());        StringBuilder s = new StringBuilder();        // 上一组数字中最后一个字符是否为0 (方便拼接 “零” )        boolean lastZero = false;        for(int j=0;j<nums.length;j++) {            char[] chs = nums[j];            // 整组数字中是不是全为 0 (方便拼接 千进制单位 )            boolean allZero = true;            // 以下循环将四位字符解析为 10进制单位中的数            for(int i=0,len=chs.length;i<len;i++) {                int value = chs[i] - '0';                // 当前数字大于0或者下一个数字不是0                if(value > 0 || (i < (len-1) && (chs[i+1] - '0') > 0)) {                    if(lastZero) {                        // 如果上一次解析的时候最有一个数字为0,并且当前数字不为0的情况则在前面先拼接 “零”                        if(value > 0) {                            s.append(num[0]);                        }                        lastZero = false;                    }                    s.append(num[value]);                    allZero = false;                }                if(value > 0) { // 不是零的情况拼接单位                     s.append(dw[chs.length - i -1]);                }            }            lastZero = chs[chs.length-1] == '0';            if(!allZero) { // 如果当前解析的四个字符不是全为0 则拼接千进制单位                s.append(dw2[nums.length - j - 1]);            }        }        return s.toString();    }    /**     * 拆分字符数组为四个字符一组的二位数组 (从后往前截取 如:     *  10001  会截取成 arr[0] = {'1'}; arr[1] = {'0','0','0','1'};     * )     * @param chs     * @return     */    private static char[][] spit(char[] chs) {        int tmpSize = chs.length / 4;        int size = chs.length %  4 == 0?tmpSize:tmpSize+1;        char[][] nums = new char[size][];        if(1 == size) {            nums[0] = chs;        } else {            for(int i=chs.length;i>0;i-=4) {                if(i < 4) {                    nums[--size] = Arrays.copyOfRange(chs, 0, i);                } else {                    nums[--size] = Arrays.copyOfRange(chs, i-4, i);                }            }        }        return nums;    }    /**     * 解析小数单位 只精确到提供的单位 @see {@link Je#dw1} 多余数字直接忽略     * @param str     * @param existsInt 是否存在整数 (如果不存在整数,则不拼 零)     * @return     */    private static String parseDecimal(String str,boolean existsInt) {        if( null == str || str.isEmpty()) {            return "";        }        if(str.length() > dw1.length) {            str = str.substring(0,dw1.length);        }        char[] chs = str.toCharArray();        StringBuilder s = new StringBuilder();        for(int i=0,len=chs.length;i<len;i++) {            int value = chs[i] - '0';            if(value != 0 || (i < (len-1) && (chs[i+1] - '0') > 0)) {                if(existsInt || value > 0) {                    s.append(num[value]);                }            }            if(value > 0) {                s.append(dw1[i]);            }        }        return s.toString();    }}
相关栏目:

用户点评