例:
text1=2034
'经过该算法后
text2="two thousand and thirty-four"
谢谢!

解决方案 »

  1.   

    if text1=2034 then
       text2="two thousand and thirty-four"
    end if
      

  2.   

    这个算法,可真不比咱的大小写数字转换简单。楼主还是想办法自己写吧,估计没人做过。不过楼主的E文好像有点问题。2034 转换为 口语,应当是
    two thousand, thirty-four
      

  3.   

    一个老外写的。看合不合你的要求。'VB PROGRAM TO CONVERT THE NUMBER TO WORD
    'AUTHOR - RAJIV DUA (IMPACT TEAM)
    'DATE - 22nd APRIL 2001
    'Updated for new requirements - 3rd March 2004 (RAJIV DUA)Option Explicit
    Dim iLoop ' For Lacs '****************' Main Function *'****************
    Public Function SpellNumber(ByVal MyNumber)
        Dim Rupees, Paisas, Temp
        Dim DecimalPlace, Count
        ReDim Place(9) As String
        Place(2) = " Thousand "
        Place(3) = " Lacs " '
        Place(4) = " Crores "
        Place(5) = " Trillion "
        MyNumber = Trim(Str(MyNumber))     ' Position of decimal place 0 if none
        ' Expand the logic to 999 crores from 9 lacs
        If (MyNumber > 999999999.99) Then
        'If (MyNumber > 999999.99) Then
         SpellNumber = "Digit excced Maximum limit"
         Exit Function
        End If
        DecimalPlace = InStr(MyNumber, ".")
        'Convert Paisas and set MyNumber to rupees amount
        If DecimalPlace > 0 Then
            Paisas = GetTens(Left(Mid(MyNumber, DecimalPlace + 1) & "00", 2))
            MyNumber = Trim(Left(MyNumber, DecimalPlace - 1))
            End If
        Count = 1
        Dim iTemp As Integer
        Do While MyNumber <> ""
           If (Count >= 2) Then
             iTemp = Right(MyNumber, 2)
            Else
             If (Len(MyNumber) = 2) Then
                iTemp = Right(MyNumber, 2)
             ElseIf (Len(MyNumber) = 1) Then
                iTemp = Right(MyNumber, 1)
             Else
                iTemp = Right(MyNumber, 3)
             End If
            End If
            If iTemp > 99 Then
                iTemp = Right(MyNumber, 3)
                Temp = GetHundreds(iTemp)
            ElseIf iTemp < 99 And iTemp > 9 Then
                iTemp = Right(MyNumber, 2)
                Temp = GetTens(iTemp)
            ElseIf iTemp < 10 Then
                iTemp = Right(MyNumber, 2)
                Temp = GetDigit(iTemp)
            End If
          'end if
           If Temp <> "" Then
             Rupees = Temp & Place(Count) & Rupees
           End If
           'If Len(MyNumber) > 3 Then
           If Count = 2 Then
                If Len(MyNumber) = 1 Then
                 MyNumber = ""
                Else
                MyNumber = Left(MyNumber, Len(MyNumber) - 2)
                End If
           ElseIf Count = 3 Then
                If Len(MyNumber) >= 3 Then
                     MyNumber = Left(MyNumber, Len(MyNumber) - 2)
                Else
                    MyNumber = ""
                End If
            ElseIf Count = 4 Then
              MyNumber = ""
           Else
                If Len(MyNumber) <= 2 Then
                    MyNumber = ""
                Else
                    MyNumber = Left(MyNumber, Len(MyNumber) - 3)
                End If
           End If
                Count = Count + 1
         Loop
        Select Case Rupees
            Case ""
                Rupees = "No Rupees"
            Case "One"
                Rupees = "One Rupee"
            Case Else
                Rupees = " Rupees " & Rupees
        End Select
        Select Case Paisas
            Case ""
                Paisas = ""
            Case "One"
                Paisas = " and One Paisa"
            Case Else
                Paisas = " and " & Paisas & " Paisas"
        End Select
        SpellNumber = Rupees & Paisas & " Only"
        iLoop = 0
        End Function
    '*******************************************
    ' Converts a number from 100-999 into text *
    '*******************************************
    Function GetHundreds(ByVal MyNumber)
        Dim Result As String
        If Val(MyNumber) = 0 Then Exit Function
        MyNumber = Right("000" & MyNumber, 3)     'Convert the hundreds place
        If Mid(MyNumber, 1, 1) <> "0" Then
            If (iLoop > 0) Then
             Result = GetDigit(Mid(MyNumber, 1, 1)) & " Lac "
             iLoop = 0
            Else
             Result = GetDigit(Mid(MyNumber, 1, 1)) & " Hundred "
             iLoop = iLoop + 1
            End If
        End If
        'Convert the tens and ones place
        If Mid(MyNumber, 2, 1) <> "0" Then
            Result = Result & GetTens(Mid(MyNumber, 2))
            Else
            Result = Result & GetDigit(Mid(MyNumber, 3))
            End If
        GetHundreds = Result
        End Function
    '*********************************************
    ' Converts a number from 10 to 99 into text. *
    '*********************************************
    Function GetTens(TensText)
        Dim Result As String
        Result = ""           'null out the temporary function value
        If Val(Left(TensText, 1)) = 1 Then   ' If value between 10-19
            Select Case Val(TensText)
            Case 10: Result = "Ten"
                Case 11: Result = "Eleven"
                Case 12: Result = "Twelve"
                Case 13: Result = "Thirteen"
                Case 14: Result = "Fourteen"
                Case 15: Result = "Fifteen"
                Case 16: Result = "Sixteen"
                Case 17: Result = "Seventeen"
                Case 18: Result = "Eighteen"
                Case 19: Result = "Nineteen"
                Case Else
                End Select
          Else                                 ' If value between 20-99
            Select Case Val(Left(TensText, 1))
                Case 2: Result = "Twenty "
                Case 3: Result = "Thirty "
                Case 4: Result = "Forty "
                Case 5: Result = "Fifty "
                Case 6: Result = "Sixty "
                Case 7: Result = "Seventy "
                Case 8: Result = "Eighty "
                Case 9: Result = "Ninety "
                Case Else
            End Select
             Result = Result & GetDigit _
                (Right(TensText, 1))  'Retrieve ones place
                End If
          GetTens = Result
          End Function
    '*******************************************
    ' Converts a number from 1 to 9 into text. *
    '*******************************************
    Function GetDigit(Digit)
        Select Case Val(Digit)
        Case 1: GetDigit = "One"
            Case 2: GetDigit = "Two"
            Case 3: GetDigit = "Three"
            Case 4: GetDigit = "Four"
            Case 5: GetDigit = "Five"
            Case 6: GetDigit = "Six"
            Case 7: GetDigit = "Seven"
            Case 8: GetDigit = "Eight"
            Case 9: GetDigit = "Nine"
            Case Else: GetDigit = ""
        End Select
    End Function
      

  4.   

    以前改写的一个代码:Function numtotext(ByVal numstr As String) As StringDim ones, teens, tens, thousands
    Dim i As Long, p As Long, nCol As Long, kilo As Boolean
    Dim buff As String, temp As String, nChar As String, N As String       ones = Array(" zero ", " one ", " two ", " three ", " four ", " five ", " six ", " seven ", " eight ", " nine ")
           teens = Array(" ten ", " eleven ", " twelve ", " thirteen ", " fourteen ", " fifteen ", " sixteen ", " seventeen ", " eighteen ", " nineteen ")
           tens = Array("", " ten ", " twenty ", " thirty ", " forty ", " fifty ", " sixty ", " seventy ", " eighty ", " ninety ")
           thousands = Array("", " thousand ", " million ", " billion ", " trillion ")
           buff = ""
           
    If numstr = "" Then MsgBox "数字为空!!!" & vbCrLf & vbCrLf & "No Number Exists!!!", 64, "警告": Exit Function
    If IsNumeric(numstr) = False Then MsgBox "非数字!!!" & vbCrLf & vbCrLf & "Not a Number!!!", 64, "警告": Exit Function
          p = IIf(InStr(1, numstr, ".") > 0, InStr(1, numstr, "."), Len(numstr))
    If p >= 16 Then MsgBox "转换的数字不得大于一千万亿!!!" & vbCrLf & vbCrLf & "The Number To Be Converted Must Less Than One Thousand Trillion!!!", 64, "警告": Exit Function
          N = Left(numstr, p)
          
    For i = p + 1 To Len(numstr)
         buff = buff & ones((Mid(numstr, i, 1)))
     
    Next
         buff = IIf(buff = "", "", " point " & buff)
         
         
    For i = Len(N) To 1 Step -1
            nChar = Mid(N, i, 1)
            nCol = (Len(N) - i) + 1
    Select Case (nCol Mod 3)    Case 1
                    kilo = True
            If i = 1 Then
                       temp = ones(nChar)
                        
            ElseIf Mid(N, i - 1, 1) = "1" Then
                   temp = teens(nChar)
                   i = i - 1
                                 
            ElseIf nChar > 0 Then
                    temp = ones(nChar)
            Else
                    kilo = False
                       
            If Mid(N, i - 1, 1) <> "0" Then
                    kilo = True
            ElseIf i > 2 Then
            If Mid$(N, i - 2, 1) <> "0" Then kilo = True
                    temp = ""
            End If
            End If
                   
            If kilo Then buff = temp & IIf(nCol > 1, thousands(nCol \ 3), "") & buff
        Case 2
            If nChar > 0 Then buff = IIf(Mid$(N, i + 1, 1) <> "0", tens(nChar) & "-" & buff, tens(nChar) & buff)
                                         
        Case 0
                buff = Switch(nChar > 0, ones(nChar) & " hundred  and ", nChar = 0 And nCol <> Len(N), " and ") & buff
    End Select
                Next i
    Do While InStr(1, buff, " and  and ") > 0
                buff = Replace(buff, " and  and ", " and ")
    Loop
    For i = 1 To 4
               buff = Replace(buff, " and " & thousands(i), thousands(i))
    Next
                buff = Replace(buff, " and  point ", " point ")
                buff = Replace(buff, "  ", " ")
                buff = IIf(Right(buff, 4) = "and ", Left(buff, Len(buff) - 4), buff)
                buff = UCase(Left(buff, 2)) & Mid(buff, 3, Len(buff) - 2)
       numtotext = buff
       End FunctionPrivate Sub Command1_Click()
    MsgBox numtotext("2034")
    End Sub