数字转换成金额

玄学的事情,以前读书的时候做过这个处理,我当时应该是做了一天,没有搞定,后来睡了一觉,晚上做梦给解出来了,当然那个方法我也忘了,鬼知道当时自己咋想的。

前段时间突然想到了这个事情,然后尝试自己再写一下看看

package com.andy.util;

public class NumToMoney {
    public static void main(String[] args) {
        String num = "12212312346789123.123";//一京二千二百一十二兆三千一百二十三亿四千六百七十八万九千一百二十三元一角二分
        String[] danwei = {"元","万","亿","兆","京"};//单位还可以往上,理论上说,只要String能装下,就能转换出来结果
        String[] jiwei = {"十","百","千"};
        if(!checkNum(num)){
            System.out.println("数字错误");
        }
        String[] num1 = null;
        StringBuffer stringBuffer = new StringBuffer();
        //拆分整数部分与小数部分
        if(num.indexOf(".")==-1){
            stringBuffer = new StringBuffer(num).reverse();
        }else{
            String[] split = num.split("\\.");
            num1 = split;
            stringBuffer = new StringBuffer(split[0]).reverse();
        }
        //String 倒叙
        StringBuffer jieguo = new StringBuffer();

        if(num1==null){
            jieguo.append("整");
        }
        //思路是将字符串倒叙,然后拼接单位  如123   变成321 依次拼接单位 3+元+2+十+1百  再反序输出就搞定了
        //因为没法确定最高位是什么单位,所以用倒叙,这样不管多大,只要单位能跟上,都能得出结果
        for(int j = 0,i=0; j < stringBuffer.length(); j++){
            if(j%4 == 0){
                //每四次取一次单位
                jieguo.append(danwei[i]);
                i++;
            }else {
                //不取单位时取计数位
                jieguo.append(jiwei[(j-1) % 4]);
            }
            jieguo.append(getValue(stringBuffer,j));
        }
        jieguo.reverse();
        //小数部分 只考虑角和分
        if(num1!=null){
            if(num1[1].length()>=1){
                jieguo.append(getValue(new StringBuffer(num1[1]),0));
                jieguo.append("角");
            }
            if(num1[1].length()>=2){
                jieguo.append(getValue(new StringBuffer(num1[1]),1));
                jieguo.append("分");
            }
        }
        System.out.println(jieguo);
    }
    //匹配 1-9的汉字
    public static String getValue(StringBuffer stringBuffer,int j){
        String shuzhi = "";
        switch (stringBuffer.charAt(j)){
            case '1': shuzhi = "一";break;
            case '2': shuzhi = "二";break;
            case '3': shuzhi = "三";break;
            case '4': shuzhi = "四";break;
            case '5': shuzhi = "五";break;
            case '6': shuzhi = "六";break;
            case '7': shuzhi = "七";break;
            case '8': shuzhi = "八";break;
            case '9': shuzhi = "九";break;
        }
        return shuzhi;
    }
    /**
     * 检查是否是数字
     **/
    public static boolean checkNum(String num){
        try {
            double a = Double.parseDouble(num);
        }catch (Exception e){
            return false;
        }
        return true;
    }
}

如果有需要,可以直接用这个代码

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值