请教个问题,VB CrystalReport控制中,如何将小写金额转换成大写金额,谢谢

解决方案 »

  1.   

    这是本人写的一个大小写转换的程序代码。
    你看可不可能用的别的地方试试
    Private Sub Command1_Click()
    '*****************************************************
      If Text1.Text = "" Then
      MsgBox "请输入数据"
      Text1.SetFocus
      Exit Sub
      End If
    Dim sztext As String
       sztext = Text1.Text
       szzf = sztext
       sz1 = Len(sztext)                                                      '记录第一次输入时字符的长度
    If sztext > 100000 Then
      MsgBox "输入的数据超出范围"
      Text1.Text = "": Text2.Text = "": Text1.SetFocus
      Exit Sub
      ElseIf sztext < 0.0099 Then
      MsgBox "输入的数据小于给出范围"
      Text1.Text = "": Text2.Text = "": Text1.SetFocus
      Exit Sub
    End If
    '*****************************************************'********************************************************************************
    '以下部份是判断输入数的小数位数的部份以及零的有效性
    If InStr(szzf, ".") <> 0 Then
       i = (sz1 - InStrRev(szzf, "."))
       If i > 2 Then
       MsgBox "您输入的小数位数多于两位,建议您重新输入"
       Text1.Text = "": Text2.Text = "": Text1.SetFocus
       Exit Sub
       End If
       
       zsws = Len(Trim(Str$(szzf)))                                            '整数位数的长度
       sz2 = sz1 - zsws
       
       If i = 1 And sz2 = 2 Then
           MsgBox "您输入的小数位数有一位上的数为零" & vbCrLf & "没有意义,建议您重输"
           Text1.Text = "": Text2.Text = "": Text1.SetFocus
           Exit Sub
       End If
       
        szzf1 = LTrim(Str$(sztext))
        decd = Len(szzf1)
        zcdcz = sz1 - decd                                                      '总长度差值
        
        If zcdcz = 1 And i = 2 And szzf1 > 1 Then
           MsgBox "您输入的小数位数有一位上的数为零" & vbCrLf & "没有意义,建议您重输"
           Text1.Text = "": Text2.Text = "": Text1.SetFocus
           Exit Sub
        End If
    End If
      '以上部份是判断输入数的小数位数的部份以及零的有效性'*********************************************************************************'以下是读出输入数据为纯小数的情况
    '*********************************************************************************
     If 0.01 <= szzf And szzf < 1 Then
     
        xsws = Len(Trim(Str$(szzf)))                                         '包括小数点在内的长度值
        If sz1 = 4 And xsws = 2 Then
           MsgBox "您输入的小数位数有一位上的数为零" & vbCrLf & "没有意义,建议您重输"
           Text1.Text = "": Text2.Text = "": Text1.SetFocus
           Exit Sub
        End If   dyw = Trim(StrReverse(Trim(Str$(szzf))))                                'dyw为小数位数的有效数字
       cd1 = Len(dyw)                                                          '测出dyw的长度
     
        xf$ = ""                                                               '定义保存大写转换的变量名
        DXSZ$ = "零壹贰叁肆伍陆柒捌玖点"                                       '把大写数字放入字符串中DXSZ
        Do While cd1 >= 2
        xs$ = Mid(dyw, cd1 - 1, 1)                                             '取字符串S4中的每一个字分别放入字符串XS中
        xs1 = Val(xs)
        xf = xf + IIf(xs1 >= 0, Mid(DXSZ, Val(xs) + 1, 1), "")
        cd1 = cd1 - 1
        Loop
        dxxh = "零点" + xf
        Text2.Text = dxxh
     
       Exit Sub
     End If
     
      

  2.   

    '以上是读出输入数据为纯小数的情况
    '*********************************************************************************  '下面开始执行子过程cab
    Text2.Text = cab(Text1.Text)
    End SubPublic Function cab(sztext As Currency) As String
     szzf$ = LTrim(Str$(sztext))
     changdu = InStr(szzf, ".")
     '以下判断输入的数据是否为整数时的大写转换
    If changdu = 0 Then                                                           '当changdu=0时该数为整数
       szcd = Len(szzf)                                                           '测出输入数据的长度:
       s2 = Trim(Str$(StrReverse(Trim(Str$(StrReverse(Trim(szzf)))))))
       s2dc = Len(s2)                                                          '测出S2的长度
       cdcz = (szcd - s2dc)                                                    '计算出szcd - s2cd 差值
         
        dxzh$ = ""                                                              '定义保存大写转换的变量名
        DXSZ$ = "零壹贰叁肆伍陆柒捌玖点"                                        '把大写数字放入字符串中DXSZ
        DXDW$ = " 拾佰仟万拾"                                                   '把数字单位放入字符串DXDW
        
        zc = 0
        Do While s2dc >= 1
          X$ = Mid(s2, zc + 1, 1)                                               '取字符串S2中的每一个字分别放入字符串X中
          zc = zc + 1
          zf$ = Mid(DXSZ, Val(X) + 1, 1)                                        '取出的一个数
          dw$ = Trim(Mid(DXDW, (s2dc + cdcz - 1) + 1, 1))
          XQ$ = Mid(s2, zc + 1, 1)
          qzf = Mid(DXSZ, Val(XQ) + 1, 1)
          lzf = IIf(qzf = zf And qzf = "零" And zf = "零", "", "零")
         dxzh = dxzh + IIf(X <> ".", IIf(lzf <> "零", "", zf) + IIf(zf <> "零", dw, ""), "")
          s2dc = s2dc - 1
        Loop
           cab = dxzh
    End If
      '以上判断输入的数据是否为整数时的大写转换
      
      '以下判断输入的数据不是整数时的大写转换
    If changdu <> 0 Then
       szzf$ = Trim(Str(szzf))                                                  '把输入的数转化成字符形的数
       cd = Len(szzf)                                                           '字符串总长度
       szcd = cd - changdu                                                      '小数位数的判断值
      Select Case szcd
       '以下是输入数据为一位小数时的大写转换
       Case 1
        zsbf$ = Mid(szzf, 1, changdu - 1)                                       '把输入数据的整数部份放入字符串zsbf中
        xsbf$ = Mid(szzf, changdu + 1, cd - changdu)                            '把输入数据的小数部份放入字符串xsbf中
        zsbf$ = LTrim(Str(zsbf))
        szcd = Len(zsbf)                                                        '判断整数部分的长度
        s2 = Trim(Str$(StrReverse(Trim(Str$(StrReverse(Trim(zsbf)))))))         '把整数部份转变成字符串放入字符串s2中
        
       s2dc = Len(s2)                                                           '测出S2的长度
       cdcz = (szcd - s2dc)                                                     '计算出szcd - s2cd 差值
        dxzh$ = ""                                                              '定义保存大写转换的变量名
        DXSZ$ = "零壹贰叁肆伍陆柒捌玖点"                                        '把大写数字放入字符串中DXSZ
        DXDW$ = " 拾佰仟万拾"                                                   '把数字单位放入字符串DXDW
        zc = 0
        Do While s2dc >= 1
          X$ = Mid(s2, zc + 1, 1)                                               '取字符串S2中的每一个字分别放入字符串X中
          zc = zc + 1
          zf$ = Mid(DXSZ, Val(X) + 1, 1)                                        '取出的一个数
          dw$ = Trim(Mid(DXDW, (s2dc + cdcz - 1) + 1, 1))
          XQ$ = Mid(s2, zc + 1, 1)
          qzf = Mid(DXSZ, Val(XQ) + 1, 1)
          lzf = IIf(qzf = zf And qzf = "零" And zf = "零", "", "零")
         dxzh = dxzh + IIf(X <> ".", IIf(lzf <> "零", "", zf) + IIf(zf <> "零", dw, ""), "")
          s2dc = s2dc - 1
        Loop
           
        '下面为小数部分的处理
        xsbf$ = LTrim(Str(xsbf))
        szcd = Len(xsbf)                                                      '判断小数长度
        s3 = Str(xsbf)
        s3 = LTrim(Str(s3))
        dxxh$ = ""                                                           '定义保存大写转换的变量名
        DXSZ$ = "零壹贰叁肆伍陆柒捌玖点"                                     '把大写数字放入字符串中DXSZ
        xs$ = Mid(s3, 1, 1)                                                  '取字符串S2中的每一个字分别放入字符串X中
        dxxh = dxxh + Mid(DXSZ, Val(xs) + 1, 1)
        dxxh = "点" + dxxh
           qbdx = dxzh + dxxh
           cab = qbdx
       '以上是输入数据为一位小数时的大写转换
       
       '以下是输入数据为两位小数时的大写转换
       Case 2
        zsbf$ = Mid(szzf, 1, changdu - 1)                                        '把输入数据的整数部份放入字符串zsbf中
        xsbf$ = Mid(szzf, changdu + 1, cd - changdu)                             '把输入数据的小数部份放入字符串xsbf中
        zsbf$ = LTrim(Str(zsbf))
        szcd = Len(zsbf)                                                        '判断整数部分的长度
        s2 = Trim(Str$(StrReverse(Trim(Str$(StrReverse(Trim(zsbf)))))))         '把整数部份转变成字符串放入字符串s2中
        
       s2dc = Len(s2)                                                           '测出S2的长度
       cdcz = (szcd - s2dc)                                                     '计算出szcd - s2cd 差值
        dxzh$ = ""                                                              '定义保存大写转换的变量名
        DXSZ$ = "零壹贰叁肆伍陆柒捌玖点"                                        '把大写数字放入字符串中DXSZ
        DXDW$ = " 拾佰仟万拾"                                                   '把数字单位放入字符串DXDW
        zc = 0
        Do While s2dc >= 1
          X$ = Mid(s2, zc + 1, 1)                                               '取字符串S2中的每一个字分别放入字符串X中
          zc = zc + 1
          zf$ = Mid(DXSZ, Val(X) + 1, 1)                                        '取出的一个数
          dw$ = Trim(Mid(DXDW, (s2dc + cdcz - 1) + 1, 1))
          XQ$ = Mid(s2, zc + 1, 1)
          qzf = Mid(DXSZ, Val(XQ) + 1, 1)
          lzf = IIf(qzf = zf And qzf = "零" And zf = "零", "", "零")
         dxzh = dxzh + IIf(X <> ".", IIf(lzf <> "零", "", zf) + IIf(zf <> "零", dw, ""), "")
          s2dc = s2dc - 1
        Loop
           
        '下面为小数部分的处理
        xsbf$ = LTrim(xsbf)
        szcd = Len(xsbf)                                                          '判断小数长度
        s4 = xsbf
        s4 = Trim(StrReverse(s4))
        xf$ = ""                                                                   '定义保存大写转换的变量名
        DXSZ$ = "零壹贰叁肆伍陆柒捌玖点"                                           '把大写数字放入字符串中DXSZ
        Do While szcd >= 1
        xs$ = Mid(s4, szcd, 1)                                                     '取字符串S4中的每一个字分别放入字符串XS中
        xs1 = Val(xs)
        xf = xf + IIf(xs1 >= 0, Mid(DXSZ, Val(xs) + 1, 1), "")
        szcd = szcd - 1
        Loop
        dxxh = "点" + xf
        qbdx = dxzh + dxxh
        cab = qbdx
       End Select
        '以上是输入数据为两位小数时的大写转换
    End If
    End Function
    Private Sub Command2_Click()
    Text1.Text = ""
    Text2.Text = ""
    Text1.SetFocus
    End Sub
      

  3.   

    Public Function CChinese(StrEng As String) As String
    If Not IsNumeric(StrEng) Or StrEng Like "*.*" Or StrEng Like "*-*" Then
    If Trim(StrEng) <> "" Then MsgBox "无效的数字"
    CChinese = "": Exit Function
    End If
    Dim intLen As Integer, intCounter As Integer
    Dim strCh As String, strTempCh As String
    Dim strSeqCh1 As String, strSeqCh2 As String
    Dim strEng2Ch As String
    strEng2Ch = "零壹贰叁肆伍陆柒捌玖"
    strSeqCh1 = " 拾佰仟 拾佰仟 拾佰仟 拾佰仟"
    strSeqCh2 = " 万亿兆"
    StrEng = CStr(CDec(StrEng))
    intLen = Len(StrEng)
    For intCounter = 1 To intLen
    strTempCh = Mid(strEng2Ch, Val(Mid(StrEng, intCounter, 1)) + 1, 1)
    If strTempCh = "零" And intLen <> 1 Then
    If Mid(StrEng, intCounter + 1, 1) = "0" Or (intLen - intCounter + 1) Mod 4 = 1 Then
    strTempCh = ""
    End If
    Else
    strTempCh = strTempCh & Trim(Mid(strSeqCh1, intLen - intCounter + 1, 1))
    End If
    If (intLen - intCounter + 1) Mod 4 = 1 Then
    strTempCh = strTempCh & Mid(strSeqCh2, (intLen - intCounter + 1) \ 4 + 1, 1)
    If intCounter > 3 Then
    If Mid(StrEng, intCounter - 3, 4) = "0000" Then strTempCh = Left(strTempCh, Len(strTempCh) - 1)
    End If
    End If
    strCh = strCh & Trim(strTempCh)
    Next
    CChinese = strCh
    End Function
      

  4.   

    Public Function ToChineseMoney(ByVal dbMoney As Double) As StringDim strChineseMoney As StringDim intMoneyPos As IntegerDim strmoney As StringDim j As IntegerDim k As IntegerDim varN1 As VariantDim varN2 As VariantDim varN3 As VariantvarN1 = Array("零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖")varN2 = Array("", "拾", "佰", "仟")varN3 = Array("元", "万", "亿")strmoney = Format(CStr(Abs(dbMoney)), "0.00")intMoneyPos = Len(strmoney)If CInt(Mid(strmoney, intMoneyPos, 1)) <> 0 Then
        
        strChineseMoney = varN1(CInt(Mid(strmoney, intMoneyPos, 1))) & "分"
        
    End IfintMoneyPos = intMoneyPos - 1If CInt(Mid(strmoney, intMoneyPos, 1)) <> 0 Then
        
        strChineseMoney = varN1(CInt(Mid(strmoney, intMoneyPos, 1))) & "角" & strChineseMoney
        
    End IfIf Round(Abs(dbMoney)) = 0 Then
        
        ToChineseMoney = strChineseMoney
        
        If dbMoney < 0 Then strChineseMoney = "负" & strChineseMoney
        
        Exit Function
        
    End IfintMoneyPos = intMoneyPos - 2 ''移动到个位j = 0k = 0While intMoneyPos > 0    If j Mod 4 = 0 Then
            
            strChineseMoney = varN3(k) & strChineseMoney
            
            k = k + 1
            
            If k > 2 Then
                
                k = 1
                
            End If
            
            j = 0
            
        End If
        
        If Mid(strmoney, intMoneyPos, 1) <> 0 Then
            
            strChineseMoney = varN2(j) & strChineseMoney
            
        End If
        
        strChineseMoney = varN1(CInt(Mid(strmoney, intMoneyPos, 1))) & strChineseMoney
        
        j = j + 1
        
        intMoneyPos = intMoneyPos - 1
        
    WendWhile InStr(1, strChineseMoney, "零零") > 0
        
        strChineseMoney = Replace(strChineseMoney, "零零", "零")
        
    WendstrChineseMoney = Replace(strChineseMoney, "零亿", "亿零")While InStr(1, strChineseMoney, "零零") > 0
        
        strChineseMoney = Replace(strChineseMoney, "零零", "零")
        
    WendstrChineseMoney = Replace(strChineseMoney, "零万", "万零")While InStr(1, strChineseMoney, "零零") > 0
        
        strChineseMoney = Replace(strChineseMoney, "零零", "零")
        
    WendstrChineseMoney = Replace(strChineseMoney, "零元", "元")strChineseMoney = Replace(strChineseMoney, "亿万", "亿")strChineseMoney = Replace(strChineseMoney, "亿万", "亿")While InStr(1, strChineseMoney, "零壹拾") > 0
        
        strChineseMoney = Replace(strChineseMoney, "零壹拾", "零拾")
        
    Wend'If Left(strChineseMoney, 2) = "壹拾" Then
    '
    '    strChineseMoney = Right(strChineseMoney, Len(strChineseMoney) - 1)
    '
    'End IfIf dbMoney < 0 Then
        
        strChineseMoney = "负" & strChineseMoney
        
    End IfToChineseMoney = strChineseMoneyEnd Function