人民币金额转化汉字的java写法

最近看到一个把一个浮点数转化为汉字人民币的小题,感觉很有意思就去用java实现了一下,没想到没有想得那么简单,在网上搜了一下也不近人意,经过几次修改后,现在实现了,现在分享一下。

     一、当输入一个浮点数后,我们要把它的整数部分和小数部分取出来。

     二、然后把相应的整数、小数部分转化为汉字读法。

     三、按照汉语的读法,不能存在零仟、零佰、零拾这样的读法但可以存在零万、零元等读法,这时候我们壹仟零佰零拾零陆圆把零佰、零拾这样的替换为零,变为壹仟零零陆圆,我们把连续为零零的替换为零就OK了。

package test;

public class NumToRmb{
    private static String[] hangArr = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
    private static String[] unitArr = { "圆", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万", "拾", "佰" };
    private static String[] unitXiaoArr = { "分", "角" };


    // 把一个浮点数分为整数和小数
    public static String[] divide(double num) {
        long zheng = (long) num;
        long xiao = Math.round((num - zheng) * 100);
        String[] arr = new String[] { String.valueOf(zheng), String.valueOf(xiao) };
        return arr;
    }
    // 把一个4位数转化为汉字
    public static String toHantr(double numStr) {
        if (numStr < 0) {
            System.out.print("请输入一个整数");
        }
        String[] arr1 = divide(numStr);
        // 得到整数部分
        String zheng = arr1[0];
        // 得到小数部分
        String xiao = arr1[1];
        String result = "";
        // 处理整数部分
        int numLen = zheng.length();


        for (int i = 0; i < numLen; i++) {
            // 得到第i位的数值
            int num = zheng.charAt(i) - '0';
            // 数值的汉字表示
            result += hangArr[num] + unitArr[numLen - 1 - i];
        }
        // 处理小数部分
        int sumLen = xiao.length();
        for (int i = 0; i < sumLen; i++) {
            if (i > 2)
            break;// 只精确到后两位
            // 得到第i位的数值
            int xnum = xiao.charAt(i) - '0';
            // 数值的汉字表示
            result += hangArr[xnum] + unitXiaoArr[sumLen - 1 - i];
        }
        // //替换所有零拾,零百,零仟为零
        result = result.replaceAll("零拾", "零");
        result = result.replaceAll("零佰", "零");
        result = result.replaceAll("零仟", "零");
        //把零零替换为零
        if (result.indexOf("零零") != -1) {
            result = result.replaceAll("零零", "零");
        }
        result = result.replaceAll("零亿", "亿");
        result = result.replaceAll("零万", "万");
        result = result.replaceAll("零圆", "圆");

        return result;
    }
    public static void main(String[] args) {
        System.out.print(toHantr(1213301.56));
    }
}

猜你喜欢

转载自www.cnblogs.com/shuilangyizu/p/8976450.html