JAVA浮点数转中文金额

import java.text.DecimalFormat;

class Translate{ 
    //字符串转化
    public Translate(String temp){
        String f=this.spilt(temp);
        System.out.println("转化后为:"+f);
    }
    private String numFormat(int flag,String s) {
        String a1[]= {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
        String a2[]= {"元","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟","万"};
        String a3[]= {"分","角"};
        String temp="";
        for(int i=0;i<s.length();i++) {
            if(flag==1) {
                if(s.length()>13) {
                    System.out.println("输入数据过大!(数值不可超过亿万!)");
                    return "";
                }
                temp=temp+a1[s.charAt(i)-'0']+a2[s.length()-i-1];
            }else if(flag==2) {
                temp=temp+a1[s.charAt(i)-'0']+a3[s.length()-i-1];
            }
        }
        return temp;
    }
    //检查数据合法性
    private boolean checkNum(String s) {
        try {
            float f=Float.valueOf(s);
            if(f<0) {
                System.out.println("非法数据,请检查");
                return false;
            }else {
                return true;
            }
        }catch(Exception e) {
            System.out.println("非法数据,请检查");
            return false;
        }
    }
    //检测并拆分数据
    private String spilt(String s) {
        if(checkNum(s)) {
            String temp[]=s.split("\\.");
            if(temp.length==2) {
                String intOnly=temp[0];
                String part1=this.numFormat(1, intOnly);
                String smallOnly=temp[1];
                Double smallTemp=Double.parseDouble("0."+smallOnly);
                DecimalFormat df=new DecimalFormat("#.00");
                String small=df.format(smallTemp).substring(1);
                int temp1=Integer.parseInt(small);
                String part2=this.numFormat(2, temp1+"");
                return cleanZero(part1+part2);
            }else if(temp.length==1){
                String intOnly=temp[0];
                String part1=this.numFormat(1,intOnly);
                return cleanZero(part1);
            }else {
                return "";
            }
        }else {
            return "";
        }       
    }
    //清除多余的零
    private String cleanZero(String s) {
        //去除字符串前多余零
        while(s.charAt(0)=='零') {
            //去除开头零
            s=s.substring(1);
            if(s.length()==1) {
                return "零";
            }
        }
        String regex1[]= {"零仟","零佰","零拾"};
        String regex2[]= {"零亿","零万","零元"};
        String regex3[]= {"亿","万","元"};
        String regex4[]= {"零角","零分"};
        for(int i=0;i<3;i++) {
            s=s.replaceAll(regex1[i], "零");
        }
        for(int i=0;i<3;i++) {
            s.replaceAll("零零零", "零");
            s.replaceAll("零零", "零");
            s=s.replaceAll(regex2[i], regex3[i]);
        }
        for(int i=0;i<2;i++) {
            s=s.replaceAll(regex4[i], "");
        }
        //万到亿全是零,只保留亿
        s=s.replaceAll("亿万", "亿");
        return s;
    }
}

public class test{
    public static void main(String args[]) {
        menu();
    }
    public static void menu() {
        while(true) {
            System.out.println("1.数字转中文金额");
            System.out.println("2.退出");
            System.out.println("请输入:");
            java.util.Scanner sc=new java.util.Scanner(System.in);
            int caseNum=sc.nextInt();
            sc.nextLine();
            switch(caseNum) {
            case 1: 
                System.out.println("请输入要转化的数值:");
                String temp=sc.next();
                new Translate(temp);
                break;
            case 2:
                System.out.println("正在退出!");
                sc.close();
                System.exit(0);
            }
        }
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值