C# 汉字中文大写货币转换函数类(根据其他人的VBA函数改编)

总算改好了。跟人家的思路一样,代码则完全C#风格的改编比较辛苦。


       /// <summary> 
        ///汉字中文大写货币转换函数类
        /// </summary> 
        public static string HZHB(decimal mymoney )
        {
            string hzhbmoney = "", intString, decString = "";
            Array tmpString, cnNumber, cnUnit;
            string DXHZ1 = "零,壹,贰,叁,肆,伍,陆,柒,捌,玖,";
            string DXHZ2 = "分,角,元,拾,佰,仟,万,拾,佰,仟,亿,拾,佰,仟,兆,拾,佰,仟,";
            cnNumber = DXHZ1.Split(',');
            cnUnit = DXHZ2.Split(',');
            intString = mymoney.ToString();
            tmpString = intString.Split('.');
            if (tmpString.GetUpperBound(0) > 0)
            {
                intString = tmpString.GetValue(0).ToString();
                decString = tmpString.GetValue(1).ToString();
            }
                //intString = intString & Left(decString & "00", 2)
            decString = decString + "00";
            intString = intString + decString.Substring(0,2);
            int i, k, j;
            k = intString.Length-1;
            if ( k > 16)  //超出转换范围,返回原值
            {
                hzhbmoney = mymoney.ToString();
            }
            else if (mymoney != 0)
            {
                for (i = 0; i < k+1; i++)
                {
                    j = int.Parse(intString.Substring(i, 1));
                    hzhbmoney = hzhbmoney + cnNumber.GetValue(j).ToString() + cnUnit.GetValue(k - i).ToString();
                }
                hzhbmoney = hzhbmoney.Replace("零分", "零");
                hzhbmoney = hzhbmoney.Replace("零角", "零");
                hzhbmoney = hzhbmoney.Replace("零拾", "零");
                hzhbmoney = hzhbmoney.Replace("零佰", "零");
                hzhbmoney = hzhbmoney.Replace("零仟", "零");
                hzhbmoney = hzhbmoney.Replace("零零零", "零");
                hzhbmoney = hzhbmoney.Replace("零零", "零");
                hzhbmoney = hzhbmoney.Replace("零元", "元");
                hzhbmoney = hzhbmoney.Replace("零万", "万");
                hzhbmoney = hzhbmoney.Replace("零亿", "亿");
                hzhbmoney = hzhbmoney.Replace("零兆", "兆");
                hzhbmoney = hzhbmoney.Replace("兆亿", "兆");
                hzhbmoney = hzhbmoney.Replace("兆万", "兆");
                hzhbmoney = hzhbmoney.Replace("亿万", "亿");
            }
            if (hzhbmoney.EndsWith("元零"))
            {
                hzhbmoney = hzhbmoney.TrimEnd('零') + "整";
            }
            else if (hzhbmoney.EndsWith("角零"))
            {
                hzhbmoney = hzhbmoney.TrimEnd('零');
            }
            return hzhbmoney;
        }

这是人家的VBA代码。连“垓京”都出来了。我不需要那么多。这个函数作者一下找不到了,在此致歉!

'数字金额转换汉字金额
Public Function CRMB(ByVal StrRMB As String) As String
    Dim i As Long, k As Long, j As Long, N As Long
    Dim RMB As String, intString As String, decString As String, tmpString() As String, cnNumber() As String, cnUnit() As String
    On Error GoTo cnstr_err: '初始化中文数字、单位
    cnNumber = Split("零,壹,贰,叁,肆,伍,陆,柒,捌,玖", ",")
    cnUnit = Split("分,角,元,拾,佰,仟,万,拾,佰,仟,亿,拾,佰,仟,兆,拾,佰,仟,京,拾,佰,仟,垓,拾,佰,仟", ",")
    decString = ""
    intString = StrRMB
    tmpString = Split(StrRMB, ".")
    If UBound(tmpString) Then
        intString = tmpString(0)
        decString = tmpString(1)
    End If
    intString = intString & Left(decString & "00", 2)
    RMB = ""
    k = Len(intString) - 1
    If k > 25 Then  'Len(cnUnit) - 1
        RMB = StrRMB  '超出转换范围,返回原值
    Else
        If Val(intString) = 0 Then
            RMB = ""
        Else
            For i = 0 To k
                j = Val(Mid(intString, i + 1, 1))
                RMB = RMB & cnNumber(j) & cnUnit(k - i)
            Next i
            RMB = Replace(RMB, "零分", "零")
            RMB = Replace(RMB, "零角", "零")
            RMB = Replace(RMB, "零拾", "零")
            RMB = Replace(RMB, "零佰", "零")
            RMB = Replace(RMB, "零仟", "零")
            RMB = Replace(RMB, "零零零", "零")
            RMB = Replace(RMB, "零零", "零")
            RMB = Replace(RMB, "零元", "元")
            RMB = Replace(RMB, "零万", "万")
            RMB = Replace(RMB, "零亿", "亿")
            RMB = Replace(RMB, "零兆", "兆")
            RMB = Replace(RMB, "零京", "京")
            RMB = Replace(RMB, "零垓", "垓")
            RMB = Replace(RMB, "垓京兆亿万", "垓")
            RMB = Replace(RMB, "垓京兆亿", "垓")
            RMB = Replace(RMB, "京兆亿万", "京")
            RMB = Replace(RMB, "垓京兆", "垓")
            RMB = Replace(RMB, "京兆亿", "京")
            RMB = Replace(RMB, "兆亿万", "兆")
            RMB = Replace(RMB, "垓京", "垓")
            RMB = Replace(RMB, "垓兆", "垓")
            RMB = Replace(RMB, "垓亿", "垓")
            RMB = Replace(RMB, "垓万", "垓")
            RMB = Replace(RMB, "京兆", "京")
            RMB = Replace(RMB, "京亿", "京")
            RMB = Replace(RMB, "京万", "京")
            RMB = Replace(RMB, "兆亿", "兆")
            RMB = Replace(RMB, "兆万", "兆")
            RMB = Replace(RMB, "亿万", "亿")
            If Right(RMB, 2) = "元零" Then '整元时
                RMB = Left(RMB, Len(RMB) - 1) & "整"
            ElseIf Right(RMB, 2) = "角零" Then '有角或分时
                RMB = Left(RMB, Len(RMB) - 1)
            End If
        End If
    End If
cnstr_exit:
    CRMB = RMB
    Exit Function
cnstr_err:
    RMB = ""
    Resume cnstr_exit
End Function


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落单枫叶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值