当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
数字向中文转换
发布时间:2010/5/28 11:12:49 来源:城市学习网 编辑:ziteng
  Public Function ChinaNum(ByVal Num As String) As String
  On Error GoTo ChinaNumErr
  ChinaNum = ""
  Dim str_tmp_CN As String
  Dim str_tmp_ZS As String
  Dim str_tmp_XS As String
  Dim I As Long
  If VBA.Trim(Num) = "" Then
  GoTo ChinaNumErr
  End If
  For I = 1 To VBA.Len(Num) Step 1
  Select Case VBA.Mid$(Num, I, 1)
  Case "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "."
  Case Else
  GoTo ChinaNumErr
  End Select
  Next I
  If Num Like "*.*" Then
  If Num Like "*.*.*" Then
  GoTo ChinaNumErr
  End If
  I = VBA.InStr(1, Num, ".", vbTextCompare)
  str_tmp_ZS = VBA.Left(Num, I - 1)
  str_tmp_XS = VBA.Right(Num, VBA.Len(Num) - I)
  str_tmp_ZS = zsTOstr(str_tmp_ZS)
  str_tmp_XS = xsTOstr(str_tmp_XS)
  If str_tmp_ZS = "" Then
  str_tmp_CN = "零"
  Else
  str_tmp_CN = str_tmp_ZS
  End If
  If str_tmp_XS <> "" Then
  str_tmp_CN = str_tmp_CN & "点" & str_tmp_XS
  End If
  End If
  GoTo ChinaNumOK
  ChinaNumOK:
  If str_tmp_CN <> "" Then
  Let ChinaNum = str_tmp_CN
  Else
  GoTo ChinaNumErr
  End If
  GoTo ChinaNumExit
  ChinaNumErr:
  Err.Clear
  ChinaNum = ""
  GoTo ChinaNumExit
  ChinaNumExit:
  'clear all money
  str_tmp_CN = ""
  str_tmp_ZS = ""
  str_tmp_XS = ""
  I = 0
  Exit Function
  End Function [NextPage]  Private Function zsTOstr(ByVal str_ZS As String) As String
  On Error GoTo zsTOstrErr
  If Not IsNumeric(str_ZS) Or str_ZS Like "*.*" Or str_ZS Like "*-*" Then
  If Trim(str_ZS) <> "" Then
  GoTo zsTOstrErr
  End If
  End If
  If VBA.Len(str_ZS) > 16 Then
  Let str_ZS = VBA.Left(str_ZS, 16)
  End If
  Dim intLen As Integer, intCounter As Integer
  Dim strCh As String, strTempCh As String
  Dim strSeqCh1 As String, strSeqCh2 As String
  Dim str_ZS2Ch As String
  str_ZS2Ch = "零壹贰叁肆伍陆柒捌玖"
  strSeqCh1 = " 拾佰仟 拾佰仟 拾佰仟 拾佰仟"
  strSeqCh2 = " 万亿兆"
  str_ZS = CStr(CDec(str_ZS))
  intLen = Len(str_ZS)
  For intCounter = 1 To intLen
  strTempCh = Mid(str_ZS2Ch, Val(Mid(str_ZS, intCounter, 1)) + 1, 1)
  If strTempCh = "零" And intLen <> 1 Then
  If Mid(str_ZS, intCounter + 1, 1) = "0" Or (intLen - intCounter + 1) Mod 4 = 1 Then
  strTempCh = ""
  End If
  Else
  strTempCh = strTempCh & Trim(Mid(strSeqCh1, intLen - intCounter + 1, 1))
  End If
  If (intLen - intCounter + 1) Mod 4 = 1 Then
  strTempCh = strTempCh & Mid(strSeqCh2, (intLen - intCounter + 1) \ 4 + 1, 1)
  If intCounter > 3 Then
  If Mid(str_ZS, intCounter - 3, 4) = "0000" Then strTempCh = Left(strTempCh, Len(strTempCh) - 1)
  End If
  End If
  strCh = strCh & Trim(strTempCh)
  Next
  GoTo zsTOstrOK
  zsTOstrOK:
  [NextPage]   Let zsTOstr = strCh
  GoTo zsTOstrExit
  zsTOstrErr:
  Err.Clear
  zsTOstr = ""
  GoTo zsTOstrExit
  zsTOstrExit:
  strCh = ""
  intLen = 0
  intCounter = 0
  strTempCh = ""
  strSeqCh1 = ""
  strSeqCh2 = ""
  str_ZS2Ch = ""
  Exit Function
  End Function
  Private Function xsTOstr(ByVal str_XS As String) As String
  On Error GoTo xsTOstrErr
  If Not IsNumeric(str_XS) Or str_XS Like "*.*" Or str_XS Like "*-*" Then
  If Trim(str_XS) <> "" Then
  GoTo xsTOstrErr
  End If
  End If
  If VBA.Len(str_XS) > 20 Then
  GoTo xsTOstrErr
  End If
  Dim str_TH As String
  str_TH = "零壹贰叁肆伍陆柒捌玖"
  Dim I As Long
  Dim str_tmp_XS As String
  For I = 1 To VBA.Len(str_XS) Step 1
  str_tmp_XS = str_tmp_XS & VBA.Mid(str_TH, VBA.CInt(VBA.Mid(str_XS, I, 1)) + 1, 1)
  Next I
  If str_tmp_XS = "" Then
  GoTo xsTOstrErr
  End If
  GoTo xsTOstrOK
  xsTOstrOK:
  Let xsTOstr = str_tmp_XS
  GoTo xsTOstrExit
  xsTOstrErr:
  Err.Clear
  xsTOstr = ""
  GoTo xsTOstrExit
  xsTOstrExit:
  str_TH = ""
  I = 0
  str_tmp_XS = ""
  Exit Function
  End Function
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved