Function DXRMB(je As Currency) As String '湖南省巴陵石化热电厂陈放雄编制 yhcfx@sohu.com '很容易将其改为其它编程语言的人民币转换函数 '************************************************** Dim sDW, sDX, sS, sCS, sWDX, sWDW As String 'sDW表示金额大写的单位 'sDX表示数字的大写 'sS表示转换的中间字符串 'sCS表示金额转换为货币化的数字字符串 'sWDX表示某一个位的位数字大写 'sWDW表示某一个位的单位 Dim cJE As Currency 'cJE表示金额扩大100位并取整后的金额 Dim iL, iW, iLEN As Integer 'iL表示金额串的长度循环变量(包含角分位但不含小数点) 'iW表示某一个位的数字数值 'iLEN表示金额串的总长度(包含角分位但不含小数点) Dim bCUR0, bPRE0 As Boolean 'bCUR0表示当前位数字是否为零 'bPRE0表示前一位数字是否为零 '***************************************************
If Abs(je) < 0.01 Then DXRMB = "零元整" Exit Function End If
sWDX = "" '位大写赋初值 If je < 0 Then sWDX = "(负)" '负数值前面加(负) je = Abs(je) End If
If je > 922337203685.47 Then '超限判断 DXRMB = "数据的绝对值不能大于922337203685.47" Exit Function End If
iW = CInt(Mid(sCS, iLEN - iL + 1, 1)) '某位的数字数值 sWDX = MidB(sDX, iW * 2 + 1, 2) '某位的大写 sWDW = MidB(sDW, (iL - 1) * 2 + 1, 2) '某位的单位 iL = iL - 1
bCUR0 = iW = 0
If (Not bCUR0) Or (sWDW = "亿") Or (sWDW = "万") Or (sWDW = "元") Then If bPRE0 Then '前一位数字为零时 If Not bCUR0 Then '如果当前位不为零 sS = sS + "零" + sWDX + sWDW Else '如果当前位为零时 If Not ((sWDW = "万") And (Right(sS, 1) = "亿")) Then sS = sS + sWDW '必为位单位为"亿|万|元",只需加入位单位 End If End If Else '前一位数字为不零时 If Not bCUR0 Then '且当前位不为零时 sS = sS + sWDX + sWDW Else '且当前位为零时 sS = sS + sWDW '必为位单位为"亿|万|元",只需加入位单位 End If End If End If