首页 > 其他 > 详细

金额转换,阿拉伯数字的金额转换成中国传统的形式,如:(¥1011)——>(壹仟零壹拾壹元整)输出。

时间:2020-05-13 19:53:03      阅读:64      评论:0      收藏:0      [点我收藏+]
一、常见的方法
string.substring(start,stop):用于提取字符串中介于两个指定下标之间的字符;返回的子串包括 start 处的字符,但不包括 stop 处的字符

stringBuffer.insert(int n,String s); 一个在任意位置插入新内容,n为下标
 
stringBuffer.append(String s); 在末尾添加
 
stringBuffer.prepend():就是在前面加
二、代码
public class Test{


    // 定义三个字符数组,把中文的数字形式存储下来,再下面代码中获取下标,设置对应中文
    private static char[] hunit = { , ,  };
    private static char[] vunit = { , 亿 };
    private static char[] digit = { , , , , , , ,,,  };


    public static void main(String[] args) {
        
        // 定义一个方法,转换数字成中国传统形式,用res接收
        String res = numberChineseString(66879);
        
        // 打印转换结果
        System.out.println(res);
    }


    private static String numberChineseString(long value) {
        
        
        // 把该数字转换成字符串,方便计算小数点后的位数
        String num = String.valueOf((long) (value * 100));
        
        // 通过String中的截取字符串的方法,获取小数点前面的数字
        String head = num.substring(0, num.length() - 2);
        
        // 通过String中的截取字符串的方法,获取小数点后面的数字
        String fina = num.substring(num.length() - 2);

        // 定义两个字符串,分别存储转换的中文形式的金额
        String headStr, finaStr;
        
        // 定义方法处理钱中的小数点前面的整钱
        headStr = handleHead(head);
        
        // 定义方法处理钱中的 角和分
        finaStr = handleFinall(fina);
        
        // 返回转换成中文形式的金额字符串
        return headStr + finaStr;
    }


    private static String handleHead(String head) {
        // 定义字符串,暂时存储转换的金额
        String headStr = "";
        // 把金额字符串转换成字符数组,方便下面进一步判断
        char[] headArray = head.toCharArray();
        // 判断前一位是否的0
        boolean preZero = false;
        // 判断前面相邻的有几个0
        int zeroCount = 0;
        
        // 循环处理每个数字
        for (int i = 0; i < headArray.length; i++) {
            // 取hunit数组下标
            int hunitIndex = (headArray.length - i - 1) % 4;
            // 取vunit数组下标
            int vunitIndex = (headArray.length - i - 1) / 4;
            // 如果循环到字符是一个0
            if (headArray[i] == 0) {
                // 把preZero置为true,同时zeroCount加1
                preZero = true;
                zeroCount++;
                // 如果满足下面if中条件,则headStr加上vunit数组中对应的中文字符,同时把preZero置为false
                if (hunitIndex == 0 && vunitIndex > 0 && zeroCount < 4) {
                    headStr = headStr + vunit[vunitIndex - 1];
                    preZero = false;
                }
            } 
            else { // 当headArray[i]不等于0
                    zeroCount = 0;
                    // 如果preZero是true,表明该位是一个零,则headStr字符串加上"零",把preZero置为false
                    if (preZero) {
                        headStr = headStr + digit[0];
                        preZero = false;
                    }
                        // 根据循环到当前的字符,转换成数字,在digit数组中找到其对应的中文,例如字符串"1",转换成数字1,找到数组中digit[1]值‘壹‘
                        // 然后加入字符串headStr中
                    headStr = headStr + digit[Integer.parseInt(headArray[i] + "")];
                    // 如果hunitIndex大于0,则根据hunitIndex的数字减去1得到对应数字,该数字作为下标,找到hunit数组中对应的中文数字,
                    // 添加到headStr字符串中,
                    if (hunitIndex > 0) {
                        headStr = headStr
                        + hunit[Integer.parseInt((hunitIndex - 1) + "")];
                    }
                    // 如果当hunitIndex等于0,同时vunitIndex大于0,则根据vunitIndex的值、数字减去1,该数字作为下标,
                    // 找到vunitIndex数组中对应的中文数字,添加到headStr字符串中
                    if (hunitIndex == 0 && vunitIndex > 0) {
                        headStr = headStr
                        + vunit[Integer.parseInt((vunitIndex - 1) + "")];
                    }
                }

        }


        // 加上单位
        if (headStr.length() > 0) {
            headStr = headStr + "";
        }
            // 返回部分最终转换成中文的数字
            return headStr;
    }


    // 小数部分的处理
    private static String handleFinall(String fina) {
        String finaStr = "";
        // 如果小数部分是两个0,则把加上一个“整”字,否则,小数点后一位加上“角”,小数后第二位加上“分”
        if (fina.equals("00")) {
            finaStr = "";
        } else {
            finaStr = digit[Integer.parseInt(fina.charAt(0) + "")] + ""
            + digit[Integer.parseInt(fina.charAt(0) + "")] + "";
        }
            // 最终把小数部分的字符串返回
            return finaStr;
    }

}

 



金额转换,阿拉伯数字的金额转换成中国传统的形式,如:(¥1011)——>(壹仟零壹拾壹元整)输出。

原文:https://www.cnblogs.com/Tibbers/p/12884133.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!