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

例:
输入: 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());
    }
}
数字转成人民币大写代码 Public Function GetChinaNum(otherNum As Double, Optional isRMB As Boolean, Optional numOption As Boolean, Optional dotNum As Integer) As String On Error Resume Next num = Trim(Str(Int(otherNum))) If isRMB Then numwei = "拾佰仟万拾佰仟亿拾佰仟" numshu = "零壹贰叁肆伍陆柒捌玖拾" Else numwei = "十百千万十百千亿十百千" numshu = "零一二三四五六七八九十" End If If otherNum < 20 And otherNum >= 10 Then num = Right(num, 1) GetChinaNum = Left(numwei, 1) End If For i = 1 To Len(num) bstr = Mid(num, i, 1) If numOption Then GetChinaNum = GetChinaNum + Mid(numshu, Val(bstr) + 1, 1) Else GetChinaNum = GetChinaNum + Mid(numshu, Val(bstr) + 1, 1) If bstr = "0" Then If Mid(numwei, Len(num) - i, 1) = "万" Or Mid(numwei, Len(num) - i, 1) = "亿" Then Do While Right(GetChinaNum, 1) = "零" GetChinaNum = Left(GetChinaNum, Len(GetChinaNum) - 1) Loop GetChinaNum = GetChinaNum + Mid(numwei, Len(num) - i, 1) End If Else GetChinaNum = GetChinaNum + Mid(numwei, Len(num) - i, 1) End If GetChinaNum = Replace(GetChinaNum, "零零", "零") End If Next i If numOption = False Then Do While Right(GetChinaNum, 1) = "零" GetChinaNum = Left(GetChinaNum, Len(GetChinaNum) - 1) Loop End If If isRMB Then numrmb = "元角分" GetChinaNum = GetChinaNum + Mid(numrmb, 1, 1) If Val(num) <> otherNum Then num = Trim(Str(Round(otherNum - Val(num), 2))) For i = 2 To Len(num) bstr = Mid(num, i, 1) GetChinaNum = GetChinaNum + Mid(numshu, Val(bstr) + 1, 1) + Mid(numrmb, i, 1) Next i Else GetChinaNum = GetChinaNum + "整" End If Else If Val(num) <> otherNum Then If dotNum = 0 Then dotNum = 4 num = Trim(CStr(Round(otherNum - Val(num), dotNum))) If GetChinaNum = "" Then GetChinaNum = "零" GetChinaNum = GetChinaNum + "点" For i = 2 To Len(num) bstr = Mid(num, i, 1) GetChinaNum = GetChinaNum + Mid(numshu, Val(bstr) + 1, 1) Next i End If End If End Function
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值