[VB.Net]数字转大写数字和大写人民币函数


源码数字转大写数字和大写人民币函数

Namespace Hot.Common

Public Class NumUtil
    '数字转成人民币大写
    Public Shared Function CapitalRMB(ByVal Num As Decimal) As String   ' 得到大写金额
        '----------------------------------------------------------------------
        Dim vNum, vDec, ret
        '------------------------------------------------------------------
        vNum = Right(Format$(Int(Num), "000000000000"), 12) ' 取十二位整数
        vDec = Right(Format$(Int(Num * 100), "00"), 2) ' 取小数点后两位
        '------------------------------------------------------------------
        ret = Num2RMB(Left(vNum, 4), "亿", False)
        If Len(ret) = 0 Then
            ret = Num2RMB(Mid(vNum, 5, 4), "万", False)
        Else
            ret = ret + Num2RMB(Mid(vNum, 5, 4), "万", True)
        End If
        If Len(ret) = 0 Then
            ret = Num2RMB(Right(vNum, 4), "元", False)
        Else
            ret = ret + Num2RMB(Right(vNum, 4), "元", True)
        End If
        '------------------------------------------------------------------
        If ret = "元" Then ret = ""
        '------------------------------------------------------------------
        If vDec = "00" And ret <> "" Then
            Return ret + "整"
        Else
            If Left(vDec, 1) <> "0" Then
                ret = ret + Num2Char(Left(vDec, 1)) + "角"
            End If
            If Right(vDec, 1) <> "0" Then
                If Right(ret, 1) = "角" Then
                    ret = ret + Num2Char(Right(vDec, 1)) + "分"
                Else
                    If ret <> "" Then
                        ret = ret + "零" + Num2Char(Right(vDec, 1)) + "分"
                    Else
                        ret = Num2Char(Right(vDec, 1)) + "分"
                    End If
                End If
            End If
            Return ret
        End If
    End Function
    '数字转成数字大写--只能保留两位小数,一般够用
    Public Shared Function CapitalNum(ByVal Num As Decimal) As String   ' 得到大写金额
        '----------------------------------------------------------------------
        Dim vNum, vDec, ret
        '------------------------------------------------------------------
        vNum = Right(Format$(Int(Num), "000000000000"), 12) ' 取十二位整数
        vDec = Right(Format$(Int(Num * 100), "00"), 2) ' 取小数点后两位
        '------------------------------------------------------------------
        ret = Num2RMB(Left(vNum, 4), "亿", False)
        If Len(ret) = 0 Then
            ret = Num2RMB(Mid(vNum, 5, 4), "万", False)
        Else
            ret = ret + Num2RMB(Mid(vNum, 5, 4), "万", True)
        End If
        If Len(ret) = 0 Then
            ret = Num2RMB(Right(vNum, 4), "", False)
        Else
            ret = ret + Num2RMB(Right(vNum, 4), "", True)
        End If
        '------------------------------------------------------------------
        If ret = "" Then ret = "零"
        '------------------------------------------------------------------
        If vDec = "00" Then
            Return ret
        Else
            ret &= "点"
            If Left(vDec, 1) <> "0" Then
                ret = ret + Num2Char(Left(vDec, 1)) + ""
            End If
            If Right(vDec, 1) <> "0" Then
                If Right(ret, 1) = "" Then
                    ret = ret + Num2Char(Right(vDec, 1)) + ""
                Else
                    If ret <> "" Then
                        ret = ret + "" + Num2Char(Right(vDec, 1)) + ""
                    Else
                        ret = Num2Char(Right(vDec, 1)) + ""
                    End If
                End If
            End If
            Return ret
        End If
    End Function
    Private Shared Function Num2RMB(ByVal sFourBitString As String, Optional _
            ByVal sUnit As String = "元", Optional ByVal bMustHeader As _
            Boolean = False) As String
        '----------------------------------------------------------------------
        Dim vNum, i, RX, BR, hdr
        '------------------------------------------------------------------
        BR = "仟佰拾元"
        '------------------------------------------------------------------
        vNum = Trim(Str(Val(sFourBitString))) ' 最多四位
        '------------------------------------------------------------------
        If (Len(vNum) < 4 And Len(vNum) > 0) And bMustHeader Then hdr = "零" _
        Else hdr = ""
        RX = ""
        Do While Len(vNum) > 0
            i = Right(vNum, 1)
            If i > 0 Then
                RX = Num2Char(i) + Right(BR, 1) + RX
            Else
                If Left(RX, 1) <> "零" Then RX = "零" + RX
            End If
            vNum = Left(vNum, Len(vNum) - 1)
            BR = Left(BR, Len(BR) - 1)
        Loop
        RX = Left(RX, Len(RX) - 1)
        If Right(RX, 1) = "零" Then ' 去除多余的零
            RX = Left(RX, Len(RX) - 1)
        End If
        If Len(RX) > 0 Then
            Return hdr + RX + sUnit
        Else
            Return RX + IIf(sUnit = "元", "元", "")
        End If
    End Function
    Private Shared Function Num2Char(ByVal i As Integer) As String
        If i >= 0 And i <= 9 Then
            Return Mid$("零壹贰叁肆伍陆柒捌玖", i + 1, 1)
        Else
            Return ""
        End If
    End Function
End Class

End Namespace

声明:何志林的个人网站|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - [VB.Net]数字转大写数字和大写人民币函数


人生最美是清欢