请问如何将数字转换成英文如将 27340.80 转换成 TWENTY SEVEN THOUSAND THREE HUNDRED FORTY POINT EIGHT

解决方案 »

  1.   

    供参考
    下面是转化为汉字
    请把 零:ZERO 壹:ONE 等做响应改动即可' 本模块生成汉字大写的金额
    ' 名称: CCh
    '        得到一位数字 N1 的汉字大写
    '        0 返回 ""
    Private Function CCh(N1) As String
    Select Case N1
      Case 0
        CCh = "零"
      Case 1
        CCh = "壹"
      Case 2
        CCh = "贰"
      Case 3
        CCh = "叁"
      Case 4
        CCh = "肆"
      Case 5
        CCh = "伍"
      Case 6
        CCh = "陆"
      Case 7
        CCh = "柒"
      Case 8
        CCh = "捌"
      Case 9
        CCh = "玖"
    End Select
    End Function
    '名称: ChMoney
    '       得到数字 N1 的汉字大写
    '       最大为 千万位
    '       O 返回 ""
    Public Function ChMoney(N1) As String
    Dim tMoney As String
    Dim lMoney As String
    Dim tn '小数位置
    Dim s1 As String '临时STRING 小数部分
    Dim s2 As String '1000 以内
    Dim s3 As String '10000If N1 = 0 Then
      ChMoney = " "
      Exit Function
    End If
    If N1 < 0 Then
      ChMoney = "负" + ChMoney(Abs(N1))
      Exit Function
    End If
    tMoney = Trim(Str(N1))
    tn = InStr(tMoney, ".")  '小数位置
    s1 = ""If tn <> 0 Then
      ST1 = Right(tMoney, Len(tMoney) - tn)
      If ST1 <> "" Then
        t1 = Left(ST1, 1)
        ST1 = Right(ST1, Len(ST1) - 1)
        If t1 <> "0" Then
          s1 = s1 + CCh(Val(t1)) + "角"
        End If
        If ST1 <> "" Then
         t1 = Left(ST1, 1)
         s1 = s1 + CCh(Val(t1)) + "分"
        End If
      End If
      ST1 = Left(tMoney, tn - 1)
    Else
      ST1 = tMoney
    End If
    s2 = ""
    If ST1 <> "" Then
      t1 = Right(ST1, 1)
      ST1 = Left(ST1, Len(ST1) - 1)
      s2 = CCh(Val(t1)) + s2
    End IfIf ST1 <> "" Then
      t1 = Right(ST1, 1)
      ST1 = Left(ST1, Len(ST1) - 1)
      If t1 <> "0" Then
        s2 = CCh(Val(t1)) + "拾" + s2
      Else
        If Left(s2, 1) <> "零" Then s2 = "零" + s2
      End If
    End IfIf ST1 <> "" Then
      t1 = Right(ST1, 1)
      ST1 = Left(ST1, Len(ST1) - 1)
      If t1 <> "0" Then
        s2 = CCh(Val(t1)) + "佰" + s2
      Else
        If Left(s2, 1) <> "零" Then s2 = "零" + s2
      End If
    End IfIf ST1 <> "" Then
      t1 = Right(ST1, 1)
      ST1 = Left(ST1, Len(ST1) - 1)
      If t1 <> "0" Then
      s2 = CCh(Val(t1)) + "仟" + s2
      Else
        If Left(s2, 1) <> "零" Then s2 = "零" + s2
      End If
    End Ifs3 = ""
    If ST1 <> "" Then
      t1 = Right(ST1, 1)
      ST1 = Left(ST1, Len(ST1) - 1)
      s3 = CCh(Val(t1)) + s3
    End If
    If ST1 <> "" Then
      t1 = Right(ST1, 1)
      ST1 = Left(ST1, Len(ST1) - 1)
      If t1 <> "0" Then
      s3 = CCh(Val(t1)) + "拾" + s3
      Else
        If Left(s3, 1) <> "零" Then s3 = "零" + s3
      End If
    End IfIf ST1 <> "" Then
      t1 = Right(ST1, 1)
      ST1 = Left(ST1, Len(ST1) - 1)
      If t1 <> "0" Then
      s3 = CCh(Val(t1)) + "佰" + s3
      Else
       If Left(s3, 1) <> "零" Then s3 = "零" + s3
      End If
    End IfIf ST1 <> "" Then
      t1 = Right(ST1, 1)
      ST1 = Left(ST1, Len(ST1) - 1)
      If t1 <> "0" Then
      s3 = CCh(Val(t1)) + "仟" + s3
      End If
    End If
    If Right(s2, 1) = "零" Then s2 = Left(s2, Len(s2) - 1)
    If Len(s3) > 0 Then
      If Right(s3, 1) = "零" Then s3 = Left(s3, Len(s3) - 1)
      s3 = s3 & "万"
    End IfChMoney = IIf(s3 & s2 = "", s1, s3 & s2 & "元" & s1)End Function
      

  2.   

    楼上的不行的,TWENTY<---->TWO TEN??? ,"万"???
    只好自己编一个了。
      

  3.   

    Option Explicit
    Public Function numtoword(numstr As Variant) As String
    '----------------------------------------------------
    ' The best data type to feed in is
    ' Decimal, but it is up to you
    '----------------------------------------------------
    Dim tempstr As String
    Dim newstr As String
    numstr = CDec(numstr)If numstr = 0 Then
    numtoword = "zero "
    Exit Function
    End IfIf numstr > 10 ^ 24 Then
    numtoword = "Too big"
    Exit Function
    End IfIf numstr >= 10 ^ 12 Then
    newstr = numtoword(Int(numstr / 10 ^ 12))
    numstr = ((numstr / 10 ^ 12) - Int(numstr / 10 ^ 12)) * 10 ^ 12
    If numstr = 0 Then
    tempstr = tempstr & newstr & "billion "
    Else
    tempstr = tempstr & newstr & "billion, "
    End If
    End IfIf numstr >= 10 ^ 6 Then
    newstr = numtoword(Int(numstr / 10 ^ 6))
    numstr = ((numstr / 10 ^ 6) - Int(numstr / 10 ^ 6)) * 10 ^ 6
    If numstr = 0 Then
    tempstr = tempstr & newstr & "million "
    Else
    tempstr = tempstr & newstr & "million, "
    End If
    End IfIf numstr >= 10 ^ 3 Then
    newstr = numtoword(Int(numstr / 10 ^ 3))
    numstr = ((numstr / 10 ^ 3) - Int(numstr / 10 ^ 3)) * 10 ^ 3
    If numstr = 0 Then
    tempstr = tempstr & newstr & "thousand "
    Else
    tempstr = tempstr & newstr & "thousand, "
    End If
    End IfIf numstr >= 10 ^ 2 Then
    newstr = numtoword(Int(numstr / 10 ^ 2))
    numstr = ((numstr / 10 ^ 2) - Int(numstr / 10 ^ 2)) * 10 ^ 2
    If numstr = 0 Then
    tempstr = tempstr & newstr & "hundred "
    Else
    tempstr = tempstr & newstr & "hundred and "
    End If
    End IfIf numstr >= 20 Then
    Select Case Int(numstr / 10)
    Case 2
    tempstr = tempstr & "twenty "
    Case 3
    tempstr = tempstr & "thirty "
    Case 4
    tempstr = tempstr & "forty "
    Case 5
    tempstr = tempstr & "fifty "
    Case 6
    tempstr = tempstr & "sixty "
    Case 7
    tempstr = tempstr & "seventy "
    Case 8
    tempstr = tempstr & "eighty "
    Case 9
    tempstr = tempstr & "ninety "
    End Select
    numstr = ((numstr / 10) - Int(numstr / 10)) * 10
    End IfIf numstr > 0 Then
    Select Case numstr
    Case 1
    tempstr = tempstr & "one "
    Case 2
    tempstr = tempstr & "two "
    Case 3
    tempstr = tempstr & "three "
    Case 4
    tempstr = tempstr & "four "
    Case 5
    tempstr = tempstr & "five "
    Case 6
    tempstr = tempstr & "six "
    Case 7
    tempstr = tempstr & "seven "
    Case 8
    tempstr = tempstr & "eight "
    Case 9
    tempstr = tempstr & "nine "
    Case 10
    tempstr = tempstr & "ten "
    Case 11
    tempstr = tempstr & "eleven "
    Case 12
    tempstr = tempstr & "twelve "
    Case 13
    tempstr = tempstr & "thirteen "
    Case 14
    tempstr = tempstr & "fourteen "
    Case 15
    tempstr = tempstr & "fifteen "
    Case 16
    tempstr = tempstr & "sixteen "
    Case 17
    tempstr = tempstr & "seventeen "
    Case 18
    tempstr = tempstr & "eighteen "
    Case 19
    tempstr = tempstr & "nineteen "
    End Select
    numstr = ((numstr / 10) - Int(numstr / 10)) * 10
    End If
    numtoword = tempstr
    End Function'在程序中使用实例
    Private Sub Command1_Click()
        Debug.Print numtoword("1234")
    End Sub
      

  4.   

    这里有个相似的:
    Private Sub Command1_Click()
    MsgBox N2S(123.456)
    End Sub
    Function N2S(Num As Double) As String
    Dim i As Integer, str As String
    For i = 1 To Len(CStr(Num))
     Select Case Mid$(CStr(Num), i, 1)
     Case "1": str = str + "ONE "
     Case "2": str = str + "TWO "
     Case "3": str = str + "THREE "
     Case "4": str = str + "FOUR "
     Case "5": str = str + "FIVE "
     Case "6": str = str + "SIX "
     Case "7": str = str + "SEVEN "
     Case "8": str = str + "EIGHT "
     Case "9": str = str + "NINE "
     Case "10": str = str + "TEN "
     Case ".": str = str + "POINT "
     End Select
    Next i
    N2S = str
    End Function
      

  5.   

    //真是遗憾,以上的几个都不对啦晕,你不会只是试代码吧?你要做的是要根据大家提供的线索写代码,而不是坐享其成给你修正了一下程序:
    Option Explicit
    Public Function numtoword(numstr As Variant) As String
        Dim s As String
        Dim arrstr
        arrstr = Split(numstr, ".")
        numstr = arrstr(0)
        If UBound(arrstr) = 1 Then
        s = arrstr(1)
        s = Replace(s, "1", " one")
        s = Replace(s, "2", " two")
        s = Replace(s, "3", " three")
        s = Replace(s, "4", " four")
        s = Replace(s, "5", " five")
        s = Replace(s, "6", " six")
        s = Replace(s, "7", " seven")
        s = Replace(s, "8", " eight")
        s = Replace(s, "9", " nine")
        s = Replace(s, "0", " zero")
        s = " point " + s
        ElseIf UBound(arrstr) > 1 Then
            numtoword = ""
            MsgBox "小数点多于一个"
            Exit Function
        ElseIf UBound(arrstr) = 0 Then
            s = ""
        End If
        '----------------------------------------------------
        ' The best data type to feed in is
        ' Decimal, but it is up to you
        '----------------------------------------------------
        Dim tempstr As String
        Dim newstr As String
        numstr = CDec(numstr)
        
        If numstr = 0 Then
        numtoword = "zero "
        Exit Function
        End If
        
        If numstr > 10 ^ 24 Then
        numtoword = "Too big"
        Exit Function
        End If
        
        If numstr >= 10 ^ 12 Then
        newstr = numtoword(Int(numstr / 10 ^ 12))
        numstr = ((numstr / 10 ^ 12) - Int(numstr / 10 ^ 12)) * 10 ^ 12
        If numstr = 0 Then
        tempstr = tempstr & newstr & "billion "
        Else
        tempstr = tempstr & newstr & "billion, "
        End If
        End If
        
        If numstr >= 10 ^ 6 Then
        newstr = numtoword(Int(numstr / 10 ^ 6))
        numstr = ((numstr / 10 ^ 6) - Int(numstr / 10 ^ 6)) * 10 ^ 6
        If numstr = 0 Then
        tempstr = tempstr & newstr & "million "
        Else
        tempstr = tempstr & newstr & "million, "
        End If
        End If
        
        If numstr >= 10 ^ 3 Then
        newstr = numtoword(Int(numstr / 10 ^ 3))
        numstr = ((numstr / 10 ^ 3) - Int(numstr / 10 ^ 3)) * 10 ^ 3
        If numstr = 0 Then
        tempstr = tempstr & newstr & "thousand "
        Else
        tempstr = tempstr & newstr & "thousand, "
        End If
        End If
        
        If numstr >= 10 ^ 2 Then
        newstr = numtoword(Int(numstr / 10 ^ 2))
        numstr = ((numstr / 10 ^ 2) - Int(numstr / 10 ^ 2)) * 10 ^ 2
        If numstr = 0 Then
        tempstr = tempstr & newstr & "hundred "
        Else
        tempstr = tempstr & newstr & "hundred and "
        End If
        End If
        
        If numstr >= 20 Then
        Select Case Int(numstr / 10)
        Case 2
        tempstr = tempstr & "twenty "
        Case 3
        tempstr = tempstr & "thirty "
        Case 4
        tempstr = tempstr & "forty "
        Case 5
        tempstr = tempstr & "fifty "
        Case 6
        tempstr = tempstr & "sixty "
        Case 7
        tempstr = tempstr & "seventy "
        Case 8
        tempstr = tempstr & "eighty "
        Case 9
        tempstr = tempstr & "ninety "
        End Select
        numstr = ((numstr / 10) - Int(numstr / 10)) * 10
        End If
        
        If numstr > 0 Then
        Select Case numstr
        Case 1
        tempstr = tempstr & "one "
        Case 2
        tempstr = tempstr & "two "
        Case 3
        tempstr = tempstr & "three "
        Case 4
        tempstr = tempstr & "four "
        Case 5
        tempstr = tempstr & "five "
        Case 6
        tempstr = tempstr & "six "
        Case 7
        tempstr = tempstr & "seven "
        Case 8
        tempstr = tempstr & "eight "
        Case 9
        tempstr = tempstr & "nine "
        Case 10
        tempstr = tempstr & "ten "
        Case 11
        tempstr = tempstr & "eleven "
        Case 12
        tempstr = tempstr & "twelve "
        Case 13
        tempstr = tempstr & "thirteen "
        Case 14
        tempstr = tempstr & "fourteen "
        Case 15
        tempstr = tempstr & "fifteen "
        Case 16
        tempstr = tempstr & "sixteen "
        Case 17
        tempstr = tempstr & "seventeen "
        Case 18
        tempstr = tempstr & "eighteen "
        Case 19
        tempstr = tempstr & "nineteen "
        End Select
        numstr = ((numstr / 10) - Int(numstr / 10)) * 10
        End If
        numtoword = tempstr + s
    End Function'在程序中使用实例
    Private Sub Command1_Click()
        Debug.Print numtoword("1234.8")
    End Sub
      

  6.   

    想要的留下E_MAIL
    我有完全符合要求,我在做一个外贸出口发票时用的.
      

  7.   

    真的吗,是不是VB的源代码邮箱:[email protected]
      

  8.   

    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 - 1)
          
    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        'Get value of this digit
            nChar = Mid(N, i, 1)        'Get column position
            nCol = (Len(N) - i) + 1        'Action depends on 1's, 10's or 100's column
    Select Case (nCol Mod 3)    Case 1  '1's position
                    kilo = True
            If i = 1 Then
                       temp = ones(nChar)          'First digit in number (last in loop)
                        
            ElseIf Mid(N, i - 1, 1) = "1" Then
                   temp = teens(nChar): 'This digit is part of "teen" number
                   i = i - 1 'Skip tens position
                                 
            ElseIf nChar > 0 Then
                    temp = ones(nChar) 'Any non-zero digit
            Else
                    kilo = False
                        'Test for non-zero digit in this grouping
            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
                    'Show "thousands" if non-zero in grouping
            If kilo Then buff = temp & IIf(nCol > 1, thousands(nCol \ 3), "") & buff
        Case 2  '10's position
            If nChar > 0 Then buff = IIf(Mid$(N, i + 1, 1) <> "0", tens(nChar) & buff, tens(nChar) & buff)
                                         
        Case 0  '100's position
                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) 'Convert first letter to upper case
           
       numtotext = buff  'Return result
       
       End FunctionPrivate Sub Command1_Click()
    MsgBox numtotext(447653470054.345)
    End Sub
      

  9.   

    [email protected] [email protected]请注意邮件已发出