货币金额大写转换库(VB) Money2String.dll

来源:互联网 发布:linux部署多个tomcat 编辑:程序博客网 时间:2024/05/20 22:39
 
  1. '******************货币金额大写转换库 Money2String.dll *********************
  2. '
  3. '
  4. '中文大写转换方法       String GetCnString(String MoneyString)
  5. '最大转化金额           999999999999999999999999.99  (24位整数位,2位小数位)
  6. '方法返回值             转换成功则返回非零长字串,否则返回零长字串
  7. '
  8. '英文大写转换方法       String GetEnString(String MoneyString)
  9. '最大转化金额           999999999999999.99   (15位整数位,2位小数位)
  10. '方法返回值             转换成功则返回非零长字串,否则返回零长字串
  11. '
  12. '
  13. '程序设计 xlFancy       Copyright (C) 2003.03.18 - 2006.12.05
  14. '邮箱地址 xlfancy@21cn.com
  15. '
  16. '**************************************************************************
  17. Option Explicit
  18. '中文大写转换
  19. Public Function GetCnString(ByVal MoneyString As StringAs String
  20. Dim i As Long
  21. Dim k As Long
  22. Dim j As Long
  23. Dim n As Long
  24. Dim rmbCapital As String
  25. Dim intString As String
  26. Dim decString As String
  27. Dim tmpString() As String
  28. Dim cnNumber() As String
  29. Dim cnUnit() As String
  30. On Error GoTo cnstr_err:
  31. '初始化中文数字、单位
  32. cnNumber = Split("零,壹,贰,叁,肆,伍,陆,柒,捌,玖"",")
  33. cnUnit = Split("分,角,元,拾,佰,仟,万,拾,佰,仟,亿,拾,佰,仟,兆,拾,佰,仟,京,拾,佰,仟,垓,拾,佰,仟"",")
  34. decString = ""
  35. intString = MoneyString
  36. tmpString = Split(MoneyString, ".")
  37. If UBound(tmpString) Then
  38.    intString = tmpString(0)
  39.    decString = tmpString(1)
  40. End If
  41. intString = intString & Left(decString & "00", 2)
  42. rmbCapital = ""
  43. k = Len(intString) - 1
  44. If k > 25 Then  'Len(cnUnit) - 1
  45.    rmbCapital = MoneyString  '超出转换范围,返回原值
  46. Else
  47.    If Val(intString) = 0 Then
  48.       rmbCapital = "零元"
  49.    Else
  50.       For i = 0 To k
  51.           j = Val(Mid(intString, i + 1, 1))
  52.           rmbCapital = rmbCapital & cnNumber(j) & cnUnit(k - i)
  53.       Next i
  54.    
  55.       rmbCapital = Replace(rmbCapital, "零分""零")
  56.       rmbCapital = Replace(rmbCapital, "零角""零")
  57.       rmbCapital = Replace(rmbCapital, "零拾""零")
  58.       rmbCapital = Replace(rmbCapital, "零佰""零")
  59.       rmbCapital = Replace(rmbCapital, "零仟""零")
  60.       
  61.       rmbCapital = Replace(rmbCapital, "零零零""零")
  62.       rmbCapital = Replace(rmbCapital, "零零""零")
  63.       
  64.       rmbCapital = Replace(rmbCapital, "零元""元")
  65.       rmbCapital = Replace(rmbCapital, "零万""万")
  66.       rmbCapital = Replace(rmbCapital, "零亿""亿")
  67.       rmbCapital = Replace(rmbCapital, "零兆""兆")
  68.       rmbCapital = Replace(rmbCapital, "零京""京")
  69.       rmbCapital = Replace(rmbCapital, "零垓""垓")
  70.    
  71.       rmbCapital = Replace(rmbCapital, "垓京兆亿万""垓")
  72.       rmbCapital = Replace(rmbCapital, "垓京兆亿""垓")
  73.       rmbCapital = Replace(rmbCapital, "京兆亿万""京")
  74.       rmbCapital = Replace(rmbCapital, "垓京兆""垓")
  75.       rmbCapital = Replace(rmbCapital, "京兆亿""京")
  76.       rmbCapital = Replace(rmbCapital, "兆亿万""兆")
  77.       rmbCapital = Replace(rmbCapital, "垓京""垓")
  78.       rmbCapital = Replace(rmbCapital, "垓兆""垓")
  79.       rmbCapital = Replace(rmbCapital, "垓亿""垓")
  80.       rmbCapital = Replace(rmbCapital, "垓万""垓")
  81.       rmbCapital = Replace(rmbCapital, "京兆""京")
  82.       rmbCapital = Replace(rmbCapital, "京亿""京")
  83.       rmbCapital = Replace(rmbCapital, "京万""京")
  84.       rmbCapital = Replace(rmbCapital, "兆亿""兆")
  85.       rmbCapital = Replace(rmbCapital, "兆万""兆")
  86.       rmbCapital = Replace(rmbCapital, "亿万""亿")
  87.    
  88.       '无小数位时
  89.       If Mid(rmbCapital, Len(rmbCapital), 1) = "零" Then
  90.          rmbCapital = Left(rmbCapital, Len(rmbCapital) - 1)
  91.       End If
  92.       '无整数位时
  93.       If Left(rmbCapital, 1) = "元" Then
  94.          rmbCapital = Mid(rmbCapital, 2, Len(rmbCapital) - 1)
  95.       End If
  96.       '无角币位时
  97.       If Left(rmbCapital, 1) = "零" Then
  98.          rmbCapital = Mid(rmbCapital, 2, Len(rmbCapital) - 1)
  99.       End If
  100.    End If
  101. End If
  102. cnstr_exit:
  103. GetCnString = rmbCapital
  104. Exit Function
  105. cnstr_err:
  106. rmbCapital = ""  '非数字类型错误,返回零长字串
  107. Resume cnstr_exit
  108. End Function
  109. '英文大写转换
  110. Public Function GetEnString(ByVal MoneyString As StringAs String
  111. Dim n As Long
  112. Dim k As Long
  113. Dim i1 As Long
  114. Dim i2 As Long
  115. Dim i3 As Long
  116. Dim curPoint As Long
  117. Dim strbuff1 As String
  118. Dim strBuff2 As String
  119. Dim strBuff3 As String
  120. Dim engCapital As String    '保存英文大写字串
  121. Dim intString As String     '保存整数部分字串
  122. Dim decString As String     '保存小数部分字串
  123. Dim tmpString() As String
  124. Dim enSmallNumber() As String
  125. Dim enLargeNumber() As String
  126. Dim enUnit() As String
  127. On Error GoTo enstr_err
  128. '初始化英文数字、单位
  129. enSmallNumber = Split(",ONE,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,ELEVEN,TWELVE,THIRTEEN,FOURTEEN,FIFTEEN,SIXTEEN,SEVENTEEN,EIGHTEEN,NINETEEN"",")
  130. enLargeNumber = Split("TWENTY,THIRTY,FORTY,FIFTY,SIXTY,SEVENTY,EIGHTY,NINETY"",")
  131. enUnit = Split(",THOUSAND,MILLION,BILLION,TRILLION"",")
  132. decString = ""
  133. intString = MoneyString
  134. tmpString = Split(MoneyString, ".")
  135. If UBound(tmpString) Then
  136.    intString = tmpString(0)
  137.    decString = tmpString(1)
  138. End If
  139. decString = Left(decString & "00", 2)
  140. engCapital = ""
  141. curPoint = Len(intString)
  142. If curPoint > 0 And curPoint < 16 Then
  143.      '以下处理整数部分
  144.      k = 0
  145.      Do While (curPoint > 0)
  146.          strbuff1 = ""
  147.          strBuff2 = ""
  148.          strBuff3 = ""
  149.          If curPoint >= 3 Then
  150.              n = Val(Mid(intString, curPoint - 2, 3))
  151.              If n <> 0 Then
  152.                  i1 = Int(n / 100)              '取佰位数值
  153.                  i2 = Int((n - i1 * 100) / 10)  '取拾位数值
  154.                  i3 = n Mod 10                  '取个位数值
  155.                  If i1 <> 0 Then
  156.                      strbuff1 = enSmallNumber(i1) + " HUNDRED "
  157.                  End If
  158.                  
  159.                  If i2 <> 0 Then
  160.                      If i2 = 1 Then
  161.                          strBuff2 = enSmallNumber(i2 * 10 + i3) & " "
  162.                      Else
  163.                          strBuff2 = enLargeNumber(i2 - 2) & " "
  164.                          If i3 <> 0 Then
  165.                              strBuff3 = enSmallNumber(i3) & " "
  166.                          End If
  167.                      End If
  168.                  Else
  169.                      If i3 <> 0 Then
  170.                          strBuff3 = enSmallNumber(i3) & " "
  171.                      End If
  172.                  End If
  173.                  engCapital = strbuff1 & strBuff2 & strBuff3 & enUnit(k) & " " & engCapital
  174.              End If
  175.          Else
  176.              n = Val(Left(intString, curPoint))
  177.              If n <> 0 Then
  178.                  i2 = Int(n / 10)   '取拾位数值
  179.                  i3 = n Mod 10      '取个位数值
  180.                  If i2 <> 0 Then
  181.                      If i2 = 1 Then
  182.                          strBuff2 = enSmallNumber(i2 * 10 + i3) & " "
  183.                      Else
  184.                          strBuff2 = enLargeNumber(i2 - 2) & " "
  185.                          If i3 <> 0 Then
  186.                              strBuff3 = enSmallNumber(i3) & " "
  187.                          End If
  188.                      End If
  189.                  Else
  190.                      If i3 <> 0 Then
  191.                          strBuff3 = enSmallNumber(i3) & " "
  192.                      End If
  193.                  End If
  194.                  engCapital = strBuff2 & strBuff3 & enUnit(k) & " " & engCapital
  195.              End If
  196.          End If
  197.          k = k + 1
  198.          curPoint = curPoint - 3
  199.      Loop
  200.      engCapital = Trim(engCapital)
  201.      '以下处理小数部分
  202.      strBuff2 = ""
  203.      strBuff3 = ""
  204.      n = Val(decString)
  205.      If n <> 0 Then
  206.           i2 = Int(n / 10)   '取拾位数值
  207.           i3 = n Mod 10      '取个位数值
  208.           If i2 <> 0 Then
  209.               If i2 = 1 Then
  210.                   strBuff2 = enSmallNumber(i2 * 10 + i3) & " "
  211.               Else
  212.                   strBuff2 = enLargeNumber(i2 - 2) & " "
  213.                   If i3 <> 0 Then
  214.                       strBuff3 = enSmallNumber(i3) & " "
  215.                   End If
  216.               End If
  217.           Else
  218.               If i3 <> 0 Then
  219.                   strBuff3 = enSmallNumber(i3) & " "
  220.               End If
  221.           End If
  222.         
  223.          '将小数字串追加到整数字串后
  224.           If Len(engCapital) > 0 Then
  225.               engCapital = engCapital & " AND CENTS " & strBuff2 & strBuff3  '有整数部分时
  226.           Else
  227.               engCapital = "CENTS " & strBuff2 & strBuff3  '只有小数部分时
  228.           End If
  229.      End If
  230.      engCapital = Trim(engCapital)
  231. Else
  232.      engCapital = MoneyString  '超出转换范围,返回原值
  233. End If
  234. enstr_exit:
  235. GetEnString = engCapital
  236. Exit Function
  237. enstr_err:
  238. engCapital = ""  '转换错误,返回零长字串
  239. Resume enstr_exit
  240. End Function
原创粉丝点击