首页 > 试题广场 >

编写一个程序,将浮点数转换成人民币读法字符串,例如,将100

[问答题]
编写一个程序,将浮点数转换成人民币读法字符串,例如,将1006333转换为壹千零陆元叁角。
 public static String[] danwei = {"分", "角", "", "拾", "佰", "仟", "万", "亿"};
    public static String[] chineseNum = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};

    public static void main(String[] args) {
        String money = "52055215975.25";
        String zhenshu = money.split("\\.")[0];
        String xiaoshu = money.split("\\.")[1];
        char[] xiaoshuChar = new char[xiaoshu.length()];
        char[] zhenshuChar = new char[zhenshu.length()];
        int index = 0;
        xiaoshuChar[index++] = xiaoshu.charAt(1);
        xiaoshuChar[index++] = xiaoshu.charAt(0);

        StringBuilder xiaoshuChinese = new StringBuilder();
        xiaoshuChinese.append(getChineseChar(1, xiaoshuChar)).append(danwei[1])
                .append(getChineseChar(0, xiaoshuChar)).append(danwei[0]);

        index = 0;
        for (int i = zhenshu.length() - 1; i >= 0; i--) {
            zhenshuChar[index++] = zhenshu.charAt(i);
        }

        StringBuilder zhenshuChinese = new StringBuilder();


        // 个    1 十2 百3 千4 |
        // 万    5 十6 百7 千8 |
        // 亿    9
        for (int x = zhenshuChar.length-1; x >=0 ; x--) {
            if (x%8 == 0 && x != 0) zhenshuChinese.append(getChineseChar(x, zhenshuChar)).append(danwei[7]);
            else yiyinei(zhenshuChar,x,zhenshuChinese);

        }

        System.out.println(zhenshuChinese.append(xiaoshuChinese).toString());
    }

    private static String getChineseChar(int i, char[] chars) {
        return chineseNum[Character.getNumericValue(chars[i])];
    }

    public static void wangyinei(char[] chars,int index,StringBuilder stringBuilder) {
        int remainder = index % 4;
        stringBuilder.append(getChineseChar(index, chars)).append(danwei[remainder+2]);
    }
    public static void yiyinei(char[] chars,int x,StringBuilder stringBuilder) {
         if (x%4 == 0 && x != 0) stringBuilder.append(getChineseChar(x, chars)).append(danwei[6]);
        else wangyinei(chars,x,stringBuilder);
    }

发表于 2021-03-19 20:50:40 回复(0)
import java.math.*;
public class no95RMB {
    static final String []RMBNum= {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖","拾","佰","仟","万","亿"};
    String conversion(double input) {
        BigDecimal bd=new BigDecimal(input+"");
        String ans="人民币";
        String [] num=(bd+"").split("\\.");
        System.out.println("inte:"+num[0]);
        System.out.println("deci:"+num[1]);
        String [] inte=new String[(int)Math.ceil(num[0].length()*1.0/4)];
        System.out.println("length:"+Math.ceil(num[0].length()*1.0/4));
        int startIndex=0;
        int endIndex=0;
        if(num[0].length()%4==0)
            endIndex=4;
        else
            endIndex=num[0].length()-num[0].length()/4*4;
        for(int i=0;i<inte.length;i++) {
            inte[i]=num[0].substring(startIndex,endIndex);
            System.out.println(inte[i]);
            startIndex=endIndex;
            endIndex=startIndex+4;
        }
        for(int i=0;i<inte.length;i++) {
            ans+=intePart(inte[i]+"");
            if(i!=inte.length-1) {
                ans+=RMBNum[RMBNum.length-1-i-(3-inte.length)];
            }else {
                ans+="元";
            }
        }
        ans+=deciPart(num[1]);
        return ans;
    }
    
    String intePart(String num) {
        StringBuilder ans=new StringBuilder();
        for(int i=0;i<num.length();i++) {
            ans.append(RMBNum[Integer.valueOf(num.charAt(i)-'0')]);
            if(Integer.valueOf(num.charAt(i)-'0')==0) {
                if(ans.length()>=2&&ans.charAt(ans.length()-2)=='零') {
                    ans.deleteCharAt(ans.length()-1);
                }
            }else {
                if(i!=num.length()-1)
                    ans.append(RMBNum[12-(4-num.length())-i]);
            }
            if(ans.length()>1&&ans.charAt(0)=='零')
                ans.deleteCharAt(0);
            if(ans.length()>1&&ans.charAt(ans.length()-1)=='零')
                ans.deleteCharAt(ans.length()-1);
        }
        return new String(ans);
    }
    String deciPart(String num) {
        String ans="";
        String buf=num.substring(0, 2);
        if(buf.equals("00"))
            return "整";
        else {
            if(buf.charAt(0)!='0')
                ans+=RMBNum[Integer.valueOf(num.charAt(0)-'0')]+"角";
            if(buf.charAt(1)!=0)
                ans+=RMBNum[Integer.valueOf(num.charAt(1)-'0')]+"分";
        }
        return ans;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        no95RMB test=new no95RMB();
        System.out.println(test.conversion(151121.15));

    }

}
发表于 2018-12-10 10:29:46 回复(0)
package fkjava1;
import java.io.*;
import java.math.*;
import java.util.Scanner;
public class RmbConvert 
{
    public String[] convert(String user)
    {    
        String strmb=user+"";
        String[] chrmb=strmb.split("");
        Integer count=chrmb.length;
        String[] chrm=new String[20];
        chrm=chrmb;
        Integer flag=0;
        for(Integer i=0;i<count;i++)
        {    
            switch(chrm[i])
            {
                case "0":
                    chrm[i]="零";
                    break;
                case "1":
                    chrm[i]="一";
                    break;
                case "2":
                    chrm[i]="二";
                    break;
                case "3":
                    chrm[i]="三";
                    break;
                case "4":
                    chrm[i]="四";
                    break;
                case "5":
                    chrm[i]="五";
                    break;
                case "6":
                    chrm[i]="六";
                    break;
                case "7":
                    chrm[i]="七";
                    break;
                case "8":
                    chrm[i]="八";
                    break;
                case "9":
                    chrm[i]="九";
                    break;
                case ".":
                    chrm[i]="元";
                    flag=i;
                    break;
            }    
        }     
        /*for(Integer i=flag;i<=chrmb.length;i++)
        {    
            if(i==flag+1) chrm[i]=chrm[i].concat("角");
            else if(i==flag+2) chrm[i]=chrm[i].concat("分");
        }*/
        for(Integer i=flag;i>=0;i--)
        {
            if(i==flag-2) chrm[i]=chrm[i].concat("十");
            else if(i==flag-3) chrm[i]=chrm[i].concat("百");
            else if(i==flag-4) chrm[i]=chrm[i].concat("千");
        }
        for(Integer i=flag;i<chrmb.length;i++)
        {    
            if(i==flag+1) chrm[i]=chrm[i].concat("角");
            else if(i==flag+2) chrm[i]=chrm[i].concat("分");
        }
        return chrm;
    }
    public static void main(String arg[]) throws Exception
    {
        BufferedReader user=new BufferedReader(new InputStreamReader(System.in));
        RmbConvert uc=new RmbConvert();
        String usin=user.readLine();
        String[] money=uc.convert(usin);
        for(String i:money)
        {
            System.out.print(i);
        }
    }
}

发表于 2020-03-30 22:10:40 回复(0)
import java.util.*;
public class num2Rmb_1 {
    private String[] hanNum= {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
    private String[] unitRmb= {"角","分"};
    private String[] unitNum= {"十","佰","千"};
    public String[] divide(double num) {
        long zheng=(long)num;
        long xiao=Math.round((num-zheng)*100);
        return new String[] {zheng+"",xiao+""};
        
    }
    private String toHan_zheng(String str) {
        String result="";
        int str_len=str.length();
        for(int i=0;i<str_len;i++) {
            int s=str.charAt(i)-48;
            if(s!=0&&i!=str_len-1) {
                result+=hanNum[s]+unitNum[str_len-i-2];
            }else if((i==0&&s==0)||(i==str_len-1&&s==0)){
                result+="";
            }else if(str.charAt(i)=='0'&&str.charAt(i+1)=='0') {
                result+="";
            }else {
                result+=hanNum[s];
            }
        }
        result+="元";
        return result;
    }
    private String toHan_xiao(String str) {
        String result="";
        int str_len=str.length();
        for(int i=0;i<str_len;i++) {
            int s=str.charAt(i)-48;
            result+=hanNum[s]+unitRmb[i];
        }
        return result;
    }
    public static void main(String[] args) {
        num2Rmb_1 sp=new num2Rmb_1();
        System.out.println("请输入要转换的钱数:");
        Scanner in=new Scanner(System.in);
        double num=in.nextDouble();
        String[] str=sp.divide(num);
        String fin_han=sp.toHan_zheng(str[0])+sp.toHan_xiao(str[1]);
        System.out.println(fin_han);
    }
}

发表于 2019-12-29 21:04:09 回复(0)
凑合吧,还挺多bug的,思路是可行的,但是到了百万会变成科学计数,不想改数据类型了,改成大数就可以了
package com.newcode;

public class Demo0 {
    
    private String [] RMB_num= {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
    private String [] RMB_unit= {"分","角","元","拾","佰","仟","万","拾","佰"};
    
    private void conservationNum(float num) {
        String input=Float.toString(num);
        StringBuffer result=new StringBuffer();
        StringBuffer integer=new StringBuffer(input.substring(0,input.indexOf(".")));
        StringBuffer decimal = new StringBuffer(input.substring(input.indexOf(".")+1,input.length()));
        for(int i=0;i<integer.length()&&integer.length()>0;i++) {//整数
            integer.replace(i, i+1, RMB_num[Integer.parseInt(String.valueOf(integer.charAt(i)))]);
        }
        for(int i=0;i<decimal.length();i++) {
            decimal.replace(i, i+1, RMB_num[Integer.parseInt(String.valueOf(decimal.charAt(i)))]);
        }
        integer.reverse();
        for(int i=integer.length()-1;i>=0;i--) {
            result.append(integer.charAt(i));
            result.append(RMB_unit[i+2]);
        }
        if(decimal.length()>1||decimal.charAt(0)!='零') {
            for(int i=0;i<decimal.length();i++) {
                result.append(decimal.charAt(i));
                result.append(RMB_unit[1-i]);
            }
            if(result.length()>11) {
                if(result.charAt(result.indexOf("万")-3)=='零'&&result.length()>13)result.delete(result.indexOf("万")-3, result.indexOf("万")-1);
                if(result.charAt(result.indexOf("万")-1)=='零')result.delete(result.indexOf("万")-1, result.indexOf("万"));
            }
            
        }else {
            result.append("整");
            if(result.length()>9) {
                if(result.charAt(result.indexOf("万")-3)=='零'&&result.length()>=11)result.delete(result.indexOf("万")-3, result.indexOf("万")-1);
                if(result.charAt(result.indexOf("万")-1)=='零')result.delete(result.indexOf("万")-1, result.indexOf("万"));
            }
        }
        System.out.println(result);
    }
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Demo0 test=new Demo0();
        float i=(float) 1006333;
        test.conservationNum(i);
    }

}


发表于 2018-12-10 21:42:52 回复(0)