Java 将数字金额转成中文大写

您所在的位置:网站首页 java数字转大写中文 Java 将数字金额转成中文大写

Java 将数字金额转成中文大写

2023-01-15 23:43| 来源: 网络整理| 查看: 265

import org.apache.commons.lang3.StringUtils;

import java.text.DecimalFormat;

public class ConvertUpMoneyUtil {

// 大写数字

    private static final String[] NUMBERS = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};

    // 整数部分的单位

    private static final String[] IUNIT = {"元","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟","万","拾","佰","仟"};

    // 小数部分的单位

    private static final String[] DUNIT = {"角","分","厘"};

    /**

    *  转换为大写的中文金额

    * @param str 字符串类型的 金额数字

    * @return

    */

    public static String toChinese(String str) {

// 判断输入的金额字符串是否符合要求

        if (StringUtils.isBlank(str) || !str.matches("(-)?[\\d]*(.)?[\\d]*")) {

return "抱歉,请输入数字!";

        }

if("0".equals(str) ||"0.00".equals(str) ||"0.0".equals(str)) {

return "零元";

        }

// 判断金额数字中是否存在负号"-"

        boolean flag =false;

        if(str.startsWith("-")){

// 标志位,标志此金额数字为负数

            flag =true;

            str = str.replaceAll("-", "");

        }

// 去掉金额数字中的逗号","

        str = str.replaceAll(",", "");

        String integerStr;//整数部分数字

        String decimalStr;//小数部分数字

        // 初始化:分离整数部分和小数部分

        if(str.indexOf(".")>0) {

integerStr = str.substring(0,str.indexOf("."));

            decimalStr = str.substring(str.indexOf(".") +1);

        }else if(str.indexOf(".")==0) {

integerStr ="";

            decimalStr = str.substring(1);

        }else {

integerStr = str;

            decimalStr ="";

        }

// beyond超出计算能力,直接返回

        if(integerStr.length()>IUNIT.length) {

return "超出计算能力!";

        }

// 整数部分数字

        int[] integers = toIntArray(integerStr);

        // 判断整数部分是否存在输入012的情况

        if (integers.length>1 && integers[0] ==0) {

return "抱歉,输入数字不符合要求!";

        }

// 设置万单位

        boolean isWan = isWan5(integerStr);

        // 小数部分数字

        int[] decimals = toIntArray(decimalStr);

        // 返回最终的大写金额

        String result = getChineseInteger(integers, isWan) + getChineseDecimal(decimals);

        if(flag){

// 如果是负数,加上"负"

            return "负" + result;

        }else{

return result;

        }

}

/**

    *  将字符串转为int数组

    * @param number  数字

    * @return

    */

    private static int[] toIntArray(String number) {

int[] array =new int[number.length()];

        for(int i =0;i

array[i] = Integer.parseInt(number.substring(i,i+1));

        }

return array;

    }

/**

    *  将整数部分转为大写的金额

    * @param integers 整数部分数字

    * @param isWan  整数部分是否已经是达到【万】

    * @return

    */

    public static String getChineseInteger(int[] integers,boolean isWan) {

StringBuffer chineseInteger =new StringBuffer("");

        int length = integers.length;

        if (length ==1 && integers[0] ==0) {

return "";

        }

for(int i=0; i

String key ="";

            if(integers[i] ==0) {

if((length - i) ==13)//万(亿)

                    key = IUNIT[4];

                else if((length - i) ==9) {//亿

                    key = IUNIT[8];

                }else if((length - i) ==5 && isWan) {//万

                    key = IUNIT[4];

                }else if((length - i) ==1) {//元

                    key = IUNIT[0];

                }

if((length - i)>1 && integers[i+1]!=0) {

key += NUMBERS[0];

                }

}

chineseInteger.append(integers[i]==0?key:(NUMBERS[integers[i]]+IUNIT[length - i -1]));

        }

return chineseInteger.toString();

    }

/**

    *  将小数部分转为大写的金额

    * @param decimals 小数部分的数字

    * @return

    */

    private static String getChineseDecimal(int[] decimals) {

StringBuffer chineseDecimal =new StringBuffer("");

        for(int i =0;i

if(i ==3) {

break;

            }

chineseDecimal.append(decimals[i]==0?"":(NUMBERS[decimals[i]]+DUNIT[i]));

        }

return chineseDecimal.toString();

    }

/**

    *  判断当前整数部分是否已经是达到【万】

    * @param integerStr  整数部分数字

    * @return

    */

    private static boolean isWan5(String integerStr) {

int length = integerStr.length();

        if(length >4) {

String subInteger ="";

            if(length >8) {

subInteger = integerStr.substring(length-8,length -4);

            }else {

subInteger = integerStr.substring(0,length -4);

            }

return Integer.parseInt(subInteger) >0;

        }else {

return false;

        }

}

// Test

    public static void main(String[] args) {

String number ="12.56";

        System.out.println(number+": "+ConvertUpMoneyUtil.toChinese(number));

        number ="1234567890563886.123";

        System.out.println(number+": "+ConvertUpMoneyUtil.toChinese(number));

        number ="1761";

        System.out.println(number+": "+ConvertUpMoneyUtil.toChinese(number));

        number ="156,0";

        System.out.println(number+": "+ConvertUpMoneyUtil.toChinese(number));

        number ="-156,0";

        System.out.println(number+": "+ConvertUpMoneyUtil.toChinese(number));

        number ="0.12";

        System.out.println(number+": "+ConvertUpMoneyUtil.toChinese(number));

        number ="0.0";

        System.out.println(number+": "+ConvertUpMoneyUtil.toChinese(number));

        number ="01.12";

        System.out.println(number+": "+ConvertUpMoneyUtil.toChinese(number));

        number ="0125";

        System.out.println(number+": "+ConvertUpMoneyUtil.toChinese(number));

        number ="-0125";

        System.out.println(number+": "+ConvertUpMoneyUtil.toChinese(number));

        number ="sdw5655";

        System.out.println(number+": "+ConvertUpMoneyUtil.toChinese(number));

        System.out.println(null+": "+ConvertUpMoneyUtil.toChinese(null));

    }

}



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3