网站建设| 数据库类| 图形图象| 程序设计| 现代办公| 操作系统| 考试认证| 网络技术| 软件工程| 电脑相关| 文学作品
网站开发| 网页制作| 操作系统| 图象图形| 考试认证| 数据库类| 程序设计| 硬件技术| 现代办公| 网络技术| 笑话频道
 
您的位置: 电脑书库首页-> 电脑文摘-> 数据库类-> ACCESS-> 将阿拉伯数字转换为汉字数字,支持到百万亿

将阿拉伯数字转换为汉字数字,支持到百万亿
作者:顾先强 来源:office中国 加入时间:2004-11-21
相关文章 相关书籍:

'例子:
'Debug.Print UpNumber(-10556765765555.45,0,True )
'显示为:
'负壹拾万伍仟伍佰陆拾柒亿陆仟伍佰柒拾陆万伍仟伍佰伍拾伍圆肆角零分


Public Function UpNumber(ByVal Number As Double, Optional ByVal Typ As Long, Optional ByVal IsMoney As Boolean) As String
'********************************************************************************
'--------------------------------------------------------------------------------
'将阿拉伯数字转换为大写字符串
'Version 1.0 2002-02-06
'Version 1.1 2002-04-05 修改到支持到千亿
'Version 1.2 2004-08-14 修改为支持 Typ,IsMoney 参数,转换结果可以不是金额,支持到百万亿
'Roadbeg
'--------------------------------------------------------------------------------
'
'--------------------------------------------------------------------------------
'参数说明:
'Number 待转换的数字,可以是小数.
'Typ 转换类型,可选值 0,1
'0 转换为 零,壹,贰 等
'1 转换为 一,二,三 等
'IsMoney 是否是金额,如果是,则转换为多少元,小数后转换为多少角,分,反之则转换为类似于"二点三"这种形式
'--------------------------------------------------------------------------------
'
'--------------------------------------------------------------------------------
'返回值说明:
'如果成功,返回转换后的字符串
'如果失败,返回空字符串
'--------------------------------------------------------------------------------
'
'--------------------------------------------------------------------------------
'注意,此函数最大只支持到百万亿
'没有对 Typ 的值进行检查,如果 Typ 不为 0,1 之一,将会引发错误.
'另,由于 Double 类型数值范围的原因,超过百万亿,将不能显示小数,同样的超过十万亿只能显示一个小数,以此类推.
'--------------------------------------------------------------------------------
'********************************************************************************

On Error GoTo Doerr

Dim Result As String '返回值
Dim strNumber As String '文本型的 Number
Dim lngNumberLen As Long '文本型的 Number 的 Len

Dim strTmp As String
Dim strFirst As String, strEnd As String
Dim lngI As Long, lngJ As Long, lngTmp As Long

Dim strNum(10) As String '大写数字
Dim strUnit(16) As String '单位,比如 十,拾,万等
Dim strUnitB(2) As String '小数后的单位

'初始化
Select Case Typ
Case 0
strNum(0) = "零": strNum(1) = "壹": strNum(2) = "贰": strNum(3) = "叁": strNum(4) = "肆"
strNum(5) = "伍": strNum(6) = "陆": strNum(7) = "柒": strNum(8) = "捌": strNum(9) = "玖"

If IsMoney Then
strUnit(0) = "圆"
strUnitB(0) = "角": strUnitB(1) = "分"
Else
strUnit(0) = "点"
End If

strUnit(1) = "拾": strUnit(2) = "佰": strUnit(3) = "仟": strUnit(4) = "万"
strUnit(5) = "拾": strUnit(6) = "佰": strUnit(7) = "仟": strUnit(8) = "亿": strUnit(9) = "拾"
strUnit(10) = "佰": strUnit(11) = "仟": strUnit(12) = "万": strUnit(13) = "拾": strUnit(14) = "佰"
strUnit(15) = "仟"

Case 1
strNum(0) = "零": strNum(1) = "一": strNum(2) = "二": strNum(3) = "三": strNum(4) = "四"
strNum(5) = "五": strNum(6) = "六": strNum(7) = "七": strNum(8) = "八": strNum(9) = "九"

If IsMoney Then
strUnit(0) = "元"
strUnitB(0) = "角": strUnitB(1) = "分"
Else
strUnit(0) = "点"
End If

strUnit(1) = "十": strUnit(2) = "百": strUnit(3) = "千": strUnit(4) = "万"
strUnit(5) = "十": strUnit(6) = "百": strUnit(7) = "千": strUnit(8) = "亿": strUnit(9) = "十"
strUnit(10) = "百": strUnit(11) = "千": strUnit(12) = "万": strUnit(13) = "十": strUnit(14) = "百"
strUnit(15) = "千"

Case Else
'参数错误
GoTo Errexit
End Select

Result = ""
If Number = 0 Then
If IsMoney Then
Result = strNum(0) & strUnit(0) & "整"
Else
Result = strNum(0)
End If
Else
If IsMoney Then
strNumber = Trim(str(FormatCurrency(Number, 2, vbTrue, vbFalse, vbFalse))) '保留两位小数
Else
strNumber = Trim(str(Number)) '简单的转换为字符串型
End If
lngNumberLen = Len(strNumber)

If Left(strNumber, 1) = "-" Then '处理负数
strFirst = "负"
strNumber = Right(strNumber, lngNumberLen - 1)
lngNumberLen = lngNumberLen - 1
Else
strFirst = "" '通常不需要 =""
End If

lngI = InStrRev(strNumber, ".")
If lngI Then
strTmp = Right(strNumber, lngNumberLen - lngI)
If IsMoney Then
strTmp = strTmp & "00"
strEnd = "" '通常不需要 =""

For lngJ = 1 To 2
Result = Result & strNum(CLng(Mid$(strTmp, lngJ, 1))) & strUnitB(lngJ - 1)
Next
Else
strTmp = Right(strNumber, lngNumberLen - lngI)
For lngJ = 1 To lngNumberLen - lngI
Result = Result & strNum(CLng(Mid$(strTmp, lngJ, 1)))
Next
End If

strNumber = Left(strNumber, lngI - 1) '去除小数部分
lngNumberLen = Len(strNumber) '新的字符串长度
Else
If IsMoney Then
strEnd = "整"
Else
strEnd = ""
End If
End If

'以下为主循环部分
lngI = 0
For lngJ = lngNumberLen To 1 Step -1
lngTmp = CLng(Mid$(strNumber, lngJ, 1))

If lngTmp Then
Result = strNum(lngTmp) & strUnit(lngI) & Result
Else
If lngI = 0 Or lngI = 4 Or lngI = 8 Or lngI = 12 Then '超过 16 位不支持
Result = strNum(lngTmp) & strUnit(lngI) & Result
Else
Result = strNum(lngTmp) & Result
End If
End If

lngI = lngI + 1
Next

Result = Replace(Result, strNum(0) & strNum(0), strNum(0)) '零零", "零
Result = Replace(Result, strNum(0) & strNum(0), strNum(0)) '零零", "零

'亿零万零圆", "亿圆"
Result = Replace(Result, strUnit(8) & strNum(0) & strUnit(4) & strNum(0) & strUnit(0), strUnit(8) & strUnit(0))

Result = Replace(Result, strUnit(8) & strNum(0) & strUnit(4), strUnit(8) & strNum(0)) '亿零万, "亿零"
Result = Replace(Result, strUnit(4) & strNum(0) & strUnit(0), strUnit(4) & strUnit(0)) '亿零万", "亿零

Result = Replace(Result, strNum(0) & strUnit(8), strUnit(8)) '零亿
Result = Replace(Result, strNum(0) & strUnit(4), strUnit(4)) '零万
Result = Replace(Result, strNum(0) & strUnit(0), strUnit(0)) '零圆

Result = Replace(Result, strNum(0) & strNum(0), strNum(0)) '零零", "零
Result = Replace(Result, strNum(0) & strNum(0), strNum(0)) '零零", "零

If IsMoney Then
Result = strFirst & Result & strEnd
Else
If Right(Result, 1) = strUnit(0) Then Result = Left(Result, Len(Result) - 1) '去除最后一个 "点"
End If
End If

Complete:
GoTo Quit
Doerr:
Errexit:
Result = ""
Quit:
UpNumber = Result
End Function


[文章录入员:tonny]

相关文章 相关书籍:
本站推荐内容

近期主机类热搜关键词:
美国服务器 美国服务器租用 海外服务器租用 国外服务器租用

ACCESS
ACCESS
MS SQL
MySQL
Oracle
Foxpro
PowerBuilder
Sybase
其它
电脑教程阅读排行
·ACCESS中使用SQL语句应注...
·Access数据库开发技巧(一)
·DELPHI中操作ACCESS技...
·Access数据库开发技巧(四)
·Access数据库开发技巧(二)
·Access数据库开发技巧(三)
·Access下如何使用通用对话框
·Access与Office其他成...
·在ASP程序中访问Access数...
·MicrosoftAccess秘...