找回密码
 立即注册

QQ登录

只需一步,快速开始

Crystal.Li 讲师达人认证 悬赏达人认证
论坛元老   /  发表于:2021-7-7 11:04  /   查看:2802  /  回复:0
本帖最后由 Crystal.Li 于 2021-7-7 11:09 编辑

本篇教程提供一个脚本函数,用来实现数字转英文大写。关于脚本的介绍和使用可以参考帮助文档:https://help.grapecity.com.cn/pa ... tion?pageId=5972510
  1. Function NumberToWord(ByVal MyNumber As String)
  2.         Dim Temp As String
  3.         Dim Num, Digits As String
  4.         Dim DecimalPlace, iCount As Integer
  5.         Dim Hundreds, Words As String
  6.         Dim place(9) As String
  7.         place(0) = " Thousand "
  8.         place(2) = " Hundred "
  9.         place(4) = "  "
  10.         place(6) = "  "
  11.         place(8) = "  "
  12.         On Error Resume Next
  13.         ' Convert MyNumber to a string, trimming extra spaces.
  14.         MyNumber = Trim(Str(MyNumber))

  15.         ' Find decimal place.
  16.         DecimalPlace = InStr(MyNumber, ".")

  17.         ' If we find decimal place...
  18.         If DecimalPlace > 0 Then
  19.                 ' Convert Digits
  20.                 Temp = Left(MyNumber.Substring(DecimalPlace) & "00", 2)
  21.                 Digits = " and " & ConvertTens(Temp)

  22.                 ' Strip off Digits from remainder to convert.
  23.                 MyNumber = Trim(Left(MyNumber, DecimalPlace - 1))
  24.         End If

  25.         '===============================================================
  26.         Dim TM As String  ' If MyNumber between 1 To 99 Only.
  27.         TM = Right(MyNumber, 2)

  28.         If Len(MyNumber) > 0 And Len(MyNumber) <= 2 Then
  29.                 If Len(TM) = 1 Then
  30.                         Words = ConvertDigit(TM)
  31.                         NumberToWord = Words & Digits
  32.                         Exit Function
  33.                 Else
  34.                         If Len(TM) = 2 Then
  35.                                 Words = ConvertTens(TM)
  36.                                 NumberToWord = Words & Digits
  37.                                 Exit Function
  38.                         End If
  39.                 End If
  40.         End If
  41.         '===============================================================

  42.         ' Convert last 3 digits of MyNumber to number in word.
  43.         Hundreds = ConvertHundreds(Right(MyNumber, 3))
  44.         ' Strip off last three digits
  45.         MyNumber = Left(MyNumber, Len(MyNumber) - 3)

  46.         iCount = 0
  47.         Do While MyNumber <> ""
  48.                 'Strip last two digits
  49.                 Temp = Right(MyNumber, 2)
  50.                 If Len(MyNumber) = 1 Then
  51.                         If Trim(Words) = "Thousand" Or Trim(Words) = "Hundred  Thousand" Or Trim(Words) = "Hundred" Then
  52.                                 Words = ConvertDigit(Temp) & place(iCount)
  53.                                 MyNumber = Left(MyNumber, Len(MyNumber) - 1)
  54.                         Else
  55.                                 Words = ConvertDigit(Temp) & place(iCount) & Words
  56.                                 MyNumber = Left(MyNumber, Len(MyNumber) - 1)
  57.                         End If
  58.                 Else
  59.                         If Trim(Words) = "Thousand" Or Trim(Words) = "Hundred  Thousand" Or Trim(Words) = "Hundred" Then
  60.                                 Words = ConvertTens(Temp) & place(iCount)
  61.                                 MyNumber = Left(MyNumber, Len(MyNumber) - 2)
  62.                         Else
  63.                                 '=================================================================
  64.                                 If Trim(ConvertTens(Temp) & place(iCount)) = "Hundred" Then
  65.                                         Words = Words
  66.                                         MyNumber = Left(MyNumber, Len(MyNumber) - 2)
  67.                                 Else
  68.                                         Words = ConvertTens(Temp) & place(iCount) & Words
  69.                                         MyNumber = Left(MyNumber, Len(MyNumber) - 2)
  70.                                 End If
  71.                         End If
  72.                 End If
  73.                 iCount = iCount + 2
  74.         Loop
  75.        
  76.         NumberToWord = " " & Words & Hundreds & Digits & ""
  77. End Function

  78.     ' Conversion for hundreds
  79.     '*****************************************
  80. Private Function ConvertHundreds(ByVal MyNumber As String)
  81.         Dim Result As String

  82.         ' Exit if there is nothing to convert.
  83.         If Val(MyNumber) = 0 Then Exit Function

  84.         ' Append leading zeros to number.
  85.         MyNumber = Right("000" & MyNumber, 3)

  86.         ' Do we have a hundreds place digit to convert?
  87.         If Left(MyNumber, 1) <> "0" Then
  88.                 Result = ConvertDigit(Left(MyNumber, 1)) & " Hundred "
  89.         End If

  90.         ' Do we have a tens place digit to convert?
  91.         If MyNumber.Substring(1, 1) <> "0" Then
  92.                 Result = Result & ConvertTens(MyNumber.Substring(1))
  93.         Else
  94.                 ' If not, then convert the ones place digit.
  95.                 Result = Result & ConvertDigit(MyNumber.Substring(2))
  96.         End If

  97.         ConvertHundreds = Trim(Result)
  98. End Function

  99.     ' Conversion for tens
  100.     '*****************************************

  101. Private Function ConvertTens(ByVal MyTens)
  102.         Dim Result As String

  103.         ' Is value between 10 and 19?
  104.         If Val(Left(MyTens, 1)) = 1 Then
  105.                 Select Case Val(MyTens)
  106.                         Case 10 : Result = "Ten"
  107.                         Case 11 : Result = "Eleven"
  108.                         Case 12 : Result = "Twelve"
  109.                         Case 13 : Result = "Thirteen"
  110.                         Case 14 : Result = "Fourteen"
  111.                         Case 15 : Result = "Fifteen"
  112.                         Case 16 : Result = "Sixteen"
  113.                         Case 17 : Result = "Seventeen"
  114.                         Case 18 : Result = "Eighteen"
  115.                         Case 19 : Result = "Nineteen"
  116.                         Case Else
  117.                 End Select
  118.         Else
  119.                 ' .. otherwise it's between 20 and 99.
  120.                 Select Case Val(Left(MyTens, 1))
  121.                         Case 2 : Result = "Twenty "
  122.                         Case 3 : Result = "Thirty "
  123.                         Case 4 : Result = "Forty "
  124.                         Case 5 : Result = "Fifty "
  125.                         Case 6 : Result = "Sixty "
  126.                         Case 7 : Result = "Seventy "
  127.                         Case 8 : Result = "Eighty "
  128.                         Case 9 : Result = "Ninety "
  129.                         Case Else
  130.                 End Select

  131.                 ' Convert ones place digit.
  132.                 Result = Result & ConvertDigit(Right(MyTens, 1))
  133.         End If

  134.         ConvertTens = Result
  135. End Function

  136. Private Function ConvertDigit(ByVal MyDigit)
  137.         Select Case Val(MyDigit)
  138.                 Case 1 : ConvertDigit = "One"
  139.                 Case 2 : ConvertDigit = "Two"
  140.                 Case 3 : ConvertDigit = "Three"
  141.                 Case 4 : ConvertDigit = "Four"
  142.                 Case 5 : ConvertDigit = "Five"
  143.                 Case 6 : ConvertDigit = "Six"
  144.                 Case 7 : ConvertDigit = "Seven"
  145.                 Case 8 : ConvertDigit = "Eight"
  146.                 Case 9 : ConvertDigit = "Nine"
  147.                 Case Else : ConvertDigit = ""
  148.         End Select
  149. End Function
复制代码


0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部