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

例:
输入: 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());
    }
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数字转成人民币大写代码 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
好的,我可以为您解答这个问题。 Oracle中可以使用PL/SQL代码将数字转换人民币大写。以下是一个示例代码: ``` CREATE OR REPLACE FUNCTION f_num2rmb(p_num IN NUMBER) RETURN VARCHAR2 IS l_num NUMBER := TRUNC(p_num); l_dec NUMBER(2,0) := TRUNC(MOD(p_num, 1) * 100); l_rmb VARCHAR2(200); l_unit CONSTANT VARCHAR2(10) := '元'; l_decimal CONSTANT VARCHAR2(10) := '角分'; l_numstr CONSTANT VARCHAR2(50) := '零壹贰叁肆伍陆柒捌玖'; l_unitstr CONSTANT VARCHAR2(50) := '仟佰拾'; l_decimalstr CONSTANT VARCHAR2(50) := '分角'; BEGIN IF l_num = 0 AND l_dec = 0 THEN RETURN '零元整'; END IF; l_rmb := TO_CHAR(l_dec, 'FM00') || l_decimal; FOR i IN 1..4 LOOP l_unitstr := SUBSTR(l_unitstr, 2); IF l_num = 0 THEN EXIT; END IF; l_rmb := SUBSTR(l_numstr, MOD(TRUNC(l_num / POWER(10, (4 - i) * 4)), 10) + 1, 1) || l_unitstr || l_rmb; l_num := TRUNC(l_num / 10); END LOOP; l_rmb := REPLACE(l_rmb, '零仟', '零'); l_rmb := REPLACE(l_rmb, '零佰', '零'); l_rmb := REPLACE(l_rmb, '零拾', '零'); l_rmb := REPLACE(l_rmb, '零零零', '零'); l_rmb := REPLACE(l_rmb, '零零', '零'); l_rmb := REPLACE(l_rmb, '零角零分', '整'); IF SUBSTR(l_rmb, 1, 1) = '零' THEN l_rmb := SUBSTR(l_rmb, 2); END IF; RETURN l_rmb || l_unit || '整'; END; / ``` 使用该函数,可以将数字转换人民币大写。例如: ``` SELECT f_num2rmb(12345.67) FROM DUAL; ``` 输出结果为: ``` 壹万贰仟叁佰肆拾伍元陆角柒分整 ``` 这个函数的代码实现比较复杂,但是可以通过调用该函数来轻松地将数字转换人民币大写

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值