热情软件屋

 

如何将数字转换成英文的说法


编号:QA001363
建立日期: 1999年7月18日 最后修改日期:1999年7月18日
所属类别:

HONGKAI:
    VFP6
    WINDOWS98
    如何将数字(如“123”)转换成英文的说法? one hundand and twenty-three用程序转换。

回答:

    这里有这个VB程序是做这件事,你可以略加修改以适应VFP(如果你将其转换为VFP程序,希望你能寄一份给我)。
    Private Function NumToText(dblVal As Double) As String
     Static Ones(0 To 9) As String
     Static Teens(0 To 9) As String
     Static Tens(0 To 9) As String
     Static Thousands(0 To 4) As String
     Static bInit As Boolean
     Dim i As Integer, bAllZeros As Boolean, bShowThousands As Boolean
     Dim strVal As String, strBuff As String, strTemp As String
     Dim nCol As Integer, nChar As Integer
    
     'Only handles positive values
     Debug.Assert dblVal >= 0
    
     If bInit = False Then
     'Initialize array
     bInit = True
     Ones(0) = "zero"
     Ones(1) = "one"
     Ones(2) = "two"
     Ones(3) = "three"
     Ones(4) = "four"
     Ones(5) = "five"
     Ones(6) = "six"
     Ones(7) = "seven"
     Ones(8) = "eight"
     Ones(9) = "nine"
     Teens(0) = "ten"
     Teens(1) = "eleven"
     Teens(2) = "twelve"
     Teens(3) = "thirteen"
     Teens(4) = "fourteen"
     Teens(5) = "fifteen"
     Teens(6) = "sixteen"
     Teens(7) = "seventeen"
     Teens(8) = "eighteen"
     Teens(9) = "nineteen"
     Tens(0) = ""
     Tens(1) = "ten"
     Tens(2) = "twenty"
     Tens(3) = "thirty"
     Tens(4) = "forty"
     Tens(5) = "fifty"
     Tens(6) = "sixty"
     Tens(7) = "seventy"
     Tens(8) = "eighty"
     Tens(9) = "ninety"
     Thousands(0) = ""
     Thousands(1) = "thousand" 'US numbering
     Thousands(2) = "million"
     Thousands(3) = "billion"
     Thousands(4) = "trillion"
     End If
     'Trap errors
     On Error GoTo NumToTextError
     'Get fractional part
     strBuff = "and " & Format((dblVal - Int(dblVal)) * 100, "00") & "/100"
     'Convert rest to string and process each digit
     strVal = CStr(Int(dblVal))
     'Non-zero digit not yet encountered
     bAllZeros = True
     'Iterate through string
     For i = Len(strVal) To 1 Step -1
     'Get value of this digit
     nChar = Val(Mid$(strVal, i, 1))
     'Get column position
     nCol = (Len(strVal) - i) + 1
     'Action depends on 1's, 10's or 100's column
     Select Case (nCol Mod 3)
     Case 1 '1's position
     bShowThousands = True
     If i = 1 Then
     'First digit in number (last in loop)
     strTemp = Ones(nChar) & " "
     ElseIf Mid$(strVal, i - 1, 1) = "1" Then
     'This digit is part of "teen" number
     strTemp = Teens(nChar) & " "
     i = i - 1 'Skip tens position
     ElseIf nChar > 0 Then
     'Any non-zero digit
     strTemp = Ones(nChar) & " "
     Else
     'This digit is zero. If digit in tens and hundreds column
     'are also zero, don't show "thousands"
     bShowThousands = False
     'Test for non-zero digit in this grouping
     If Mid$(strVal, i - 1, 1) <> "0" Then
     bShowThousands = True
     ElseIf i > 2 Then
     If Mid$(strVal, i - 2, 1) <> "0" Then
     bShowThousands = True
     End If
     End If
     strTemp = ""
     End If
     'Show "thousands" if non-zero in grouping
     If bShowThousands Then
     If nCol > 1 Then
     strTemp = strTemp & Thousands(nCol \ 3)
     If bAllZeros Then
     strTemp = strTemp & " "
     Else
     strTemp = strTemp & ", "
     End If
     End If
     'Indicate non-zero digit encountered
     bAllZeros = False
     End If
     strBuff = strTemp & strBuff
     Case 2 '10's position
     If nChar > 0 Then
     If Mid$(strVal, i + 1, 1) <> "0" Then
     strBuff = Tens(nChar) & "-" & strBuff
     Else
     strBuff = Tens(nChar) & " " & strBuff
     End If
     End If
     Case 0 '100's position
     If nChar > 0 Then
     strBuff = Ones(nChar) & " hundred " & strBuff
     End If
     End Select
     Next i
     'Convert first letter to upper case
     strBuff = UCase$(Left$(strBuff, 1)) & Mid$(strBuff, 2)
    EndNumToText:
     'Return result
     NumToText = strBuff
     Exit Function
    NumToTextError:
     strBuff = "#Error#"
     Resume EndNumToText
    End Function
    
    相关问题:
    QA001571 "如何实现人民币的数字形式转换成大写形式"

此问题由李海回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio