人民币,大写中文与数字之间转换

本文介绍了一个将人民币金额从数字形式转换为汉字形式的Java程序。该程序能够处理包含小数部分的金额,并正确地将其转换为汉字表示形式,如“八元二角”。通过使用循环和条件判断,程序能准确地处理每一位数字。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

例:
输入: 8.2
输出: 八元二角

import java.util.Scanner;

public class RMBTest {

    public static void main(String[] args) {
        Scanner scan=new Scanner(System.in);
        while (scan.hasNext())
        {
            RMB r=new RMB(scan.next());
            r.show();
        }
    }
}

class RMB {
    private String num[]={"零","一" ,"二" ,"三" ,"四" ,"五" ,"六" ,"七" ,"八" ,"九"};
    private String unit[]={"厘","分","角","","十","百","千"};
    private String a="";
    private String b="";
    boolean isZero=false;
    public RMB(String money) {
        int i=0;
        for(;i<money.length()&&money.charAt(i)!='.';i++)
        {
            a=a+money.charAt(i);
        }
        while(++i<money.length())
        {
            b=b+money.charAt(i);
        }
    }
    public String divideByInteger()
    {
        String answer="";
        if(!a.equals("0"))
        {

            answer=answer+ devideByHM(a)+"元";
        }
        if(!b.equals(""))
        {
            answer=answer + small();
        }

        return answer;
    }
    public String small()
    {
        String answer="";
        int n=2;
        boolean isZero=false;
        boolean firstZero=(b.charAt(0)=='0'&&a.equals("0")?true:false);
        for(int i=0;n-i>=0&&i<b.length();i++)
        {
            if(b.charAt(i)=='0')
            {
                isZero=true;
                continue;
            }
            if(isZero&&!firstZero)
            {
                answer=answer+num[0]+num[b.charAt(i)-'0']+unit[n-i];
                isZero=false;
            }
            else
            {
                answer=answer+num[b.charAt(i)-'0']+unit[n-i];
            }
        }
        return answer;
    }
    public String devideByHM(String a)
    {
        String answer="";
        if(a.length()>8)
        {
            answer=answer+ devideByTS(a.substring(0,a.length()-8))+"亿";
            if(a.substring(a.length()-8,a.length()).charAt(0)=='0')isZero=true;
            answer=answer+ devideByTS(a.substring(a.length()-8,a.length()));
        }
        else
        {
            answer=answer+ devideByTS(a);
        }
        return answer;
    }
    public String devideByTS(String a)
    {
        String answer="";
        if(a.length()>4&&!allZero(a.substring(0,a.length()-4)))
        {
            answer=answer+ devideByThousand(a.substring(0,a.length()-4))+"万";
            if(a.substring(a.length()-4,a.length()).charAt(0)=='0')isZero=true;
            answer=answer+ devideByThousand(a.substring(a.length()-4,a.length()));
        }
        else
        {
            answer=answer+ devideByThousand(a.substring(/*a.length()-4*/0,a.length()));
        }
        return answer;
    }
    public String devideByThousand(String a)
    {
        String answer="";
        int unitStart=3;
        int unitEnd=6;

        for(int i=0;unitEnd-i>=unitStart&&i<a.length();i++)
        {
            if(a.charAt(i)=='0')
            {
                isZero=true;
                continue;
            }
            if(isZero)
            {
                answer=answer+num[0]+num[a.charAt(i)-'0']+unit[unitStart-1+a.length()-i];
                isZero=false;
            }
            else
            {
                answer=answer+num[a.charAt(i)-'0']+unit[unitStart-1+a.length()-i];
            }
        }

        return answer;
    }
    private boolean allZero(String a)
    {
        for(int i=0;i<a.length();i++)
        {
            if(a.charAt(i)!='0')return false;
        }
        return true;
    }
    public void show()
    {
        System.out.println(divideByInteger());
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值