本帖最后由 Crystal.Li 于 2021-7-7 11:09 编辑
本篇教程提供一个脚本函数,用来实现数字转英文大写。关于脚本的介绍和使用可以参考帮助文档:https://help.grapecity.com.cn/pa ... tion?pageId=5972510
- Function NumberToWord(ByVal MyNumber As String)
- Dim Temp As String
- Dim Num, Digits As String
- Dim DecimalPlace, iCount As Integer
- Dim Hundreds, Words As String
- Dim place(9) As String
- place(0) = " Thousand "
- place(2) = " Hundred "
- place(4) = " "
- place(6) = " "
- place(8) = " "
- On Error Resume Next
- ' Convert MyNumber to a string, trimming extra spaces.
- MyNumber = Trim(Str(MyNumber))
- ' Find decimal place.
- DecimalPlace = InStr(MyNumber, ".")
- ' If we find decimal place...
- If DecimalPlace > 0 Then
- ' Convert Digits
- Temp = Left(MyNumber.Substring(DecimalPlace) & "00", 2)
- Digits = " and " & ConvertTens(Temp)
- ' Strip off Digits from remainder to convert.
- MyNumber = Trim(Left(MyNumber, DecimalPlace - 1))
- End If
- '===============================================================
- Dim TM As String ' If MyNumber between 1 To 99 Only.
- TM = Right(MyNumber, 2)
- If Len(MyNumber) > 0 And Len(MyNumber) <= 2 Then
- If Len(TM) = 1 Then
- Words = ConvertDigit(TM)
- NumberToWord = Words & Digits
- Exit Function
- Else
- If Len(TM) = 2 Then
- Words = ConvertTens(TM)
- NumberToWord = Words & Digits
- Exit Function
- End If
- End If
- End If
- '===============================================================
- ' Convert last 3 digits of MyNumber to number in word.
- Hundreds = ConvertHundreds(Right(MyNumber, 3))
- ' Strip off last three digits
- MyNumber = Left(MyNumber, Len(MyNumber) - 3)
- iCount = 0
- Do While MyNumber <> ""
- 'Strip last two digits
- Temp = Right(MyNumber, 2)
- If Len(MyNumber) = 1 Then
- If Trim(Words) = "Thousand" Or Trim(Words) = "Hundred Thousand" Or Trim(Words) = "Hundred" Then
- Words = ConvertDigit(Temp) & place(iCount)
- MyNumber = Left(MyNumber, Len(MyNumber) - 1)
- Else
- Words = ConvertDigit(Temp) & place(iCount) & Words
- MyNumber = Left(MyNumber, Len(MyNumber) - 1)
- End If
- Else
- If Trim(Words) = "Thousand" Or Trim(Words) = "Hundred Thousand" Or Trim(Words) = "Hundred" Then
- Words = ConvertTens(Temp) & place(iCount)
- MyNumber = Left(MyNumber, Len(MyNumber) - 2)
- Else
- '=================================================================
- If Trim(ConvertTens(Temp) & place(iCount)) = "Hundred" Then
- Words = Words
- MyNumber = Left(MyNumber, Len(MyNumber) - 2)
- Else
- Words = ConvertTens(Temp) & place(iCount) & Words
- MyNumber = Left(MyNumber, Len(MyNumber) - 2)
- End If
- End If
- End If
- iCount = iCount + 2
- Loop
-
- NumberToWord = " " & Words & Hundreds & Digits & ""
- End Function
- ' Conversion for hundreds
- '*****************************************
- Private Function ConvertHundreds(ByVal MyNumber As String)
- Dim Result As String
- ' Exit if there is nothing to convert.
- If Val(MyNumber) = 0 Then Exit Function
- ' Append leading zeros to number.
- MyNumber = Right("000" & MyNumber, 3)
- ' Do we have a hundreds place digit to convert?
- If Left(MyNumber, 1) <> "0" Then
- Result = ConvertDigit(Left(MyNumber, 1)) & " Hundred "
- End If
- ' Do we have a tens place digit to convert?
- If MyNumber.Substring(1, 1) <> "0" Then
- Result = Result & ConvertTens(MyNumber.Substring(1))
- Else
- ' If not, then convert the ones place digit.
- Result = Result & ConvertDigit(MyNumber.Substring(2))
- End If
- ConvertHundreds = Trim(Result)
- End Function
- ' Conversion for tens
- '*****************************************
- Private Function ConvertTens(ByVal MyTens)
- Dim Result As String
- ' Is value between 10 and 19?
- If Val(Left(MyTens, 1)) = 1 Then
- Select Case Val(MyTens)
- 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
- ' .. otherwise it's between 20 and 99.
- Select Case Val(Left(MyTens, 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
- ' Convert ones place digit.
- Result = Result & ConvertDigit(Right(MyTens, 1))
- End If
- ConvertTens = Result
- End Function
- Private Function ConvertDigit(ByVal MyDigit)
- Select Case Val(MyDigit)
- Case 1 : ConvertDigit = "One"
- Case 2 : ConvertDigit = "Two"
- Case 3 : ConvertDigit = "Three"
- Case 4 : ConvertDigit = "Four"
- Case 5 : ConvertDigit = "Five"
- Case 6 : ConvertDigit = "Six"
- Case 7 : ConvertDigit = "Seven"
- Case 8 : ConvertDigit = "Eight"
- Case 9 : ConvertDigit = "Nine"
- Case Else : ConvertDigit = ""
- End Select
- End Function
复制代码
|
|