当前位置:编程学习 > C#/ASP.NET >>

金额小写转大写 水晶报表2008 自定义函数又如何写?

'金额小写转大写
'金额小写转大写
    Public Function NtoC(ByVal sNum As String, Optional ByVal Yuan As String = "元", Optional ByVal Jiao As String = "角", Optional ByVal Fen As String = "分") As String
        If Val(Trim(sNum)) > 0 Then
            Dim sIntD, sDecD As String
            Dim i, iCount, j, iLength As Integer
            Dim lStartPos As Long
            Dim sBIT(4), sUNIT(3), sCents(2) As String
            sBIT(0) = "" '个
            sBIT(1) = "拾"
            sBIT(2) = "佰"
            sBIT(3) = "仟"
            sUNIT(0) = ""
            sUNIT(1) = "万"
            sUNIT(2) = "亿"
            sUNIT(3) = Yuan
            sCents(0) = Fen
            sCents(1) = Jiao
            Dim temp As String
            If InStr(Trim(sNum), ".") > 0 Then
                temp = Left(Trim(sNum), InStr(Trim(sNum), ".") - 1)
            Else
                temp = Trim(sNum)
            End If
            iCount = IIf(Len(temp) Mod 4, Len(Trim(temp)) \ 4 + 1, Len(Trim(temp)) \ 4)
            lStartPos = 1
            For i = iCount To 1 Step -1
                If i = iCount And Len(Trim(temp)) Mod 4 <> 0 Then
                    iLength = Len(Trim(temp)) Mod 4
                Else
                    iLength = 4
                End If
                sIntD = Mid(Trim(temp), lStartPos, iLength)
                For j = 1 To Len(Trim(sIntD))
                    If Val(Mid(sIntD, j, 1)) <> 0 Then
                        NtoC = NtoC & Choose(Val(Mid(sIntD, j, 1)), "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖") & sBIT(Len(Trim(sIntD)) - j)
                    Else
                        If Val(Mid(sIntD, j + 1, 1)) <> 0 Then
                            NtoC = NtoC & "零"
                        End If
                    End If
                Next j
                lStartPos = lStartPos + iLength
                If i < iCount Then
                    If (Val(Mid(sIntD, Len(Trim(sIntD)), 1)) <> 0 Or Val(Mid(sIntD, Len(Trim(sIntD)) - 1, 1)) <> 0 Or Val(Mid(sIntD, Len(Trim(sIntD)) - 2, 1)) Or Val(Mid(sIntD, Len(Trim(sIntD)) - 3, 1)) <> 0) Then
                        NtoC = NtoC & sUNIT(i - 1)
                    End If
                Else
                    NtoC = NtoC & sUNIT(i - 1)
                End If
            Next
            If Len(Trim(NtoC)) > 0 Then
                NtoC = NtoC & Yuan
            End If
            '小数
            If InStr(1, Trim(sNum), ".") <> 0 Then
                sDecD = Right(sNum, Len(Trim(sNum)) - InStr(1, Trim(sNum), "."))
                For i = 1 To Len(Trim(sDecD))
                    If Val(Mid(Trim(sDecD), i, 1)) <> 0 Then
                        NtoC = NtoC & Choose(Val(Mid(Trim(sDecD), i, 1)), "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖")
                        NtoC = NtoC & sCents(2 - i)
                        If i >= 2 Then
                            Exit For
                        End If
                    Else
                        If Len(Trim(NtoC)) > 0 Then
                            NtoC = NtoC & "零" & sCents(2 - i)
                        End If
                    End If
                Next i
                '  Else
                '      NtoC = NtoC & sCents(i)
            End If
        Else
            NtoC = "零" & Yuan
        End If
        NtoC = NtoC & "整"

    End Function 水晶报表 2008 --------------------编程问答-------------------- 能过VB里的函数转换,在打开报表前,通这参数反转后的字符串传一报表中.
补充:.NET技术 ,  VB.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,