Access交流网
  • 设为首页|收藏本站|繁体中文|手机版
  •     
  • Access培训-Access开发平台-Access行业开发

  • 首页
  • 资讯
  • 技巧
  • 源码
  • 行业
  • 资源
  • 活动
  • 关于

技巧

ACCESS数据库

启动/设置/选项/背景

修复/压缩

安全/加密/解密

快捷键

版本升级/其它等

数据表

命名方式/设计规范

表设计

查询

Sql语言基础

选择查询

更新查询

删除查询

追加查询

生成表查询

交叉表查询

SQL特定查询

查询参数

查询综合应用

界面/窗体/控件

标签

文本框

命令按钮

组合框/列表框

选项组/复选框/选项按钮

选项卡

子窗体

窗体本身/综合应用

其它

报表打印

报表设计

高级报表

模块/函数/VBA/API/系统

VBA基础

内置函数

调试/跟踪/Debug

模块/类模块

API/COM/系统相关

字符数字日期

网络通信游戏

加密解密安全

文件处理

经典算法

宏/菜单/工具栏/功能区

宏/脚本

菜单/工具栏

功能区/Ribbon

图表/图形/图像/多媒体

图表

图形/图像

音频

视频/动画

DAO/链接表/ADO/ADP

DAO/链接表/ODBC

ADO/RDO

ADP

ActiveX/第三方控件/插件

Treeview树控件

ListView列表控件

Toolbar工具栏控件

微软其它控件

Dbi-Tech

CodeJock

Grid++Report

FastReport

ComponentOne

加载项/插件/Addin

OFFICE集成/导入导出/交互

Excel导入导出/交互

Word导入导出/交互

PPT交互

Outlook控制/邮件

Text文本文件/INI/CSV

PDF/SWF/XML格式

CAD格式

Sharepoint/其它Office

SqlServer/其它数据库

表

视图

存储过程/触发器

函数

用户/权限/安全

调试/维护

SqlServer其它/综合

发布/打包/文档/帮助

开发版/运行时

打包/发布/部署

开发文档/帮助制作

Access完整行业系统

采购管理系统

销售管理系统

仓库管理系统

人力资源管理HRM

CRM管理系统

MRP/ERP管理系统

BRP/流程优化

其它管理系统

心得/经验/绝招
其它/杂项
Excel技巧

Excel应用与操作

Excel开发编程

Word技巧

Word应用与操作

Word开发编程

Outlook技巧

Outlook应用与操作

Outlook开发编程

热门文章

  • Access支持对ADO记..
  • 生成下一个导出的新的文件名..
  • 获取系统闲置了多久(用户多..
  • Access四舍五入的陷阱
  • 自定义时差函数(加入跨天计..
  • 导出access查询或者A..

最新文章

  • Access利用汉字拼音首..
  • Access中关于VBA的..
  • Access动态更改列名
  • 非ACCESS环境处理空值..
  • 导出access查询或者A..
  • Access引用类库操作源..

联系方式

Access交流网(免费Access交流)

QQ:18449932 

网  址:www.access-cn.com

当前位置:首页 > 技巧 > 模块/函数/VBA/API/系统 > 模块/类模块
模块/类模块

数字转英文的多种实现方法

数字转中文大写金额Office中国有很多相关的现成函数和代码了。但小写数字转英文金额还真不是太多。

今天有时间将Office中国论坛和Access中国以前的技巧整理了一下,形成了多种阿拉伯数字转换英文数字的方法:


一、作者:stone0823-Office中国

以前在Excel中写的两个自定义函数,NumberToEnglish将一个数字转换成英文大写,NumToChi将一个数字转换成中文大写,算法容易理解。现贴上来,请大家多支持。

  access数据库


Public Function NumToChi(Figure) As String

    Dim lFigure1 As Long

    Dim lFigure2 As Long

    Dim lFigure3 As Long


    'Not a figure

    If Not IsNumeric(Figure) Then

        NumToChi = "#NotANumber"

        Exit Function

    End If


    Call InitChiFig


    'Round the figure

    Figure = Round(Figure, 2)


    '0 to 10,000

    If Figure >= 0 And Figure < 10000 Then

        lFigure1 = Int(Figure)

        lFigure2 = (Figure - lFigure1) * 100


        If lFigure2 = 0 Then

            NumToChi = NumToChi_01(lFigure1)

        Else

            NumToChi = NumToChi_01(lFigure1) _

                & "点" & NumToChi_02(lFigure2)

        End If

    End If


    '10,000 to 100,000,000

    If Figure >= 10000 And Figure < 100000000 Then

        lFigure1 = Figure \ 10000

        lFigure2 = Int(Figure - lFigure1 * 10000)

        lFigure3 = (Figure - lFigure1 * 10000 - lFigure2) * 100


        '100

        If lFigure2 = 0 And lFigure3 = 0 Then

            NumToChi = NumToChi_01(lFigure1) & "万"

        End If


        '101

        If lFigure2 = 0 And lFigure3 <> 0 Then

            NumToChi = NumToChi_01(lFigure1) & "万点" _

                & NumToChi_02(lFigure3)

        End If


        '110

        If lFigure2 <> 0 And lFigure3 = 0 Then

            If lFigure2 < 1000 Then

                 NumToChi = NumToChi_01(lFigure1) & "万零" _

                    & NumToChi_01(lFigure2)

            Else

                NumToChi = NumToChi_01(lFigure1) & "万" _

                    & NumToChi_01(lFigure2)

            End If

        End If


        '111

        If lFigure2 <> 0 And lFigure3 <> 0 Then

            If lFigure2 < 1000 Then

                NumToChi = NumToChi_01(lFigure1) & "万零" _

                    & NumToChi_01(lFigure2) & "点" _

                    & NumToChi_02(lFigure3)

            Else

                 NumToChi = NumToChi_01(lFigure1) & "万" _

                    & NumToChi_01(lFigure2) & "点" _

                    & NumToChi_02(lFigure3)

            End If

        End If

    End If


    If Figure >= 100000000 Then '100,000,000

        NumToChi = "#NotDefined"

    End If

End Function


二、作者:fe2o3-Office中国


Dim StrNO(19) As String

Dim Unit(8) As String

Dim StrTens(9) As String


Public Function NumberToString(Number As Double) As String

    Dim Str As String, BeforePoint As String, AfterPoint As String, tmpStr As String

    Dim Point As Integer

    Dim nBit As Integer

    Dim CurString As String

    Call Init

    '"//开始处理

    Str = CStr(Round(Number, 2))

    ' Str = Number

    If InStr(1, Str, ".") = 0 Then

        BeforePoint = Str

        AfterPoint = ""

    Else

        BeforePoint = Left(Str, InStr(1, Str, ".") - 1)

        AfterPoint = Right(Str, Len(Str) - InStr(1, Str, "."))

        If Len(AfterPoint) = 1 Then

            AfterPoint = AfterPoint & "0"

        End If

    End If

    If Len(BeforePoint) > 12 Then

        NumberToString = "Too Big."

        Exit Function

    End If

    Str = ""

    Do While Len(BeforePoint) > 0

        nNumLen = Len(BeforePoint)

        If nNumLen Mod 3 = 0 Then

            CurString = Left(BeforePoint, 3)

            BeforePoint = Right(BeforePoint, nNumLen - 3)

        Else

            CurString = Left(BeforePoint, (nNumLen Mod 3))

            BeforePoint = Right(BeforePoint, nNumLen - (nNumLen Mod 3))

        End If

        nBit = Len(BeforePoint) / 3

        tmpStr = DecodeHundred(CurString)

        If (BeforePoint = String(Len(BeforePoint), "0") Or nBit = 0) And Len(CurString) = 3 Then

            If CInt(Left(CurString, 1)) <> 0 And CInt(Right(CurString, 2)) <> 0 Then

                tmpStr = Left(tmpStr, InStr(1, tmpStr, Unit(4)) + Len(Unit(4))) & Unit(8) & " " & Right(tmpStr, Len(tmpStr) - (InStr(1, tmpStr, Unit(4)) + Len(Unit(4))))

            ElseIf CInt(Left(CurString, 1)) <> 0 And CInt(Right(CurString, 2)) = 0 Then

                tmpStr = Unit(8) & " " & tmpStr

            End If

        End If

        If nBit = 0 Then

            Str = Trim(Str & " " & tmpStr)

        Else

            Str = Trim(Str & " " & tmpStr & " " & Unit(nBit))

        End If

        If Left(Str, 3) = Unit(8) Then Str = Trim(Right(Str, Len(Str) - 3))

        If BeforePoint = String(Len(BeforePoint), "0") Then Exit Do

        Debug.Print Str

    Loop

    BeforePoint = Str

    If Len(AfterPoint) > 0 Then

        AfterPoint = Unit(6) & " " & DecodeHundred(AfterPoint) & " " & Unit(7)

    Else

        AfterPoint = Unit(5)

    End If

    NumberToString = BeforePoint & " " & AfterPoint

End Function


Private Function DecodeHundred(HundredString As String) As String

    Dim tmp As Integer

    If Len(HundredString) > 0 And Len(HundredString) <= 3 Then

        Select Case Len(HundredString)

        Case 1

            tmp = CInt(HundredString)

            If tmp <> 0 Then DecodeHundred = StrNO(tmp)

        Case 2

            tmp = CInt(HundredString)

            If tmp <> 0 Then

                If (tmp < 20) Then

                    DecodeHundred = StrNO(tmp)

                Else

                    If CInt(Right(HundredString, 1)) = 0 Then

                        DecodeHundred = StrTens(Int(tmp / 10))

                    Else

                        DecodeHundred = StrTens(Int(tmp / 10)) & "-" & StrNO(CInt(Right(HundredString, 1)))

                    End If

                End If

            End If

        Case 3

            If CInt(Left(HundredString, 1)) <> 0 Then

                DecodeHundred = StrNO(CInt(Left(HundredString, 1))) & " " & Unit(4) & " " & DecodeHundred(Right(HundredString, 2))

            Else

                DecodeHundred = DecodeHundred(Right(HundredString, 2))

            End If

        Case Else

        End Select

    End If

End Function


Private Sub Init()

    If StrNO(1) <> "One" Then

        StrNO(1) = "One"

        StrNO(2) = "Two"

        StrNO(3) = "Three"

        StrNO(4) = "Four"

        StrNO(5) = "Five"

        StrNO(6) = "Six"

        StrNO(7) = "Seven"

        StrNO(8) = "Eight"

        StrNO(9) = "Nine"

        StrNO(10) = "Ten"

        StrNO(11) = "Eleven"

        StrNO(12) = "Twelve"

        StrNO(13) = "Thirteen"

        StrNO(14) = "Fourteen"

        StrNO(15) = "Fifteen"

        StrNO(16) = "Sixteen"

        StrNO(17) = "Seventeen"

        StrNO(18) = "Eighteen"

        StrNO(19) = "Nineteen"

        StrTens(1) = "Ten"

        StrTens(2) = "Twenty"

        StrTens(3) = "Thirty"

        StrTens(4) = "Forty"

        StrTens(5) = "Fifty"

        StrTens(6) = "Sixty"

        StrTens(7) = "Seventy"

        StrTens(8) = "Eighty"

        StrTens(9) = "Ninety"

        Unit(1) = "Thousand" '第一个三位

        Unit(2) = "Million" '第二个三位

        Unit(3) = "Billion" '第三个三位

        Unit(4) = "Hundred"

        Unit(5) = "Only"

        Unit(6) = "Point"

        Unit(7) = "Cent" '不是货币的话,把此值赋空

        Unit(8) = "And"

    End If

End Sub



发布人:zstmtony  
分享到:
点击次数:  更新时间:2016-12-08 22:27:07  【打印此页】  【关闭】
上一条:生成下一个导出的新的文件名(Txt或PDF)  下一条:Access使用 SqlServer ODBC链接表如何筛选值列表



相关文章

  • • Access利用汉字拼音首字母筛选组合框的值
  • • Access中关于VBA的窗体模块、标准模块、类模块的认识
  • • Access动态更改列名
  • • 非ACCESS环境处理空值——自定义NZ函数
  • • 导出access查询或者Access表到指定excel表
  • • Access引用类库操作源码实例
  • • Access支持对ADO记录集进行多列查找
  • • 自定义函数 - 字段字符串聚合连接函数 DCONCAT

热门文章

  • [2017-05-09] 获取第N个分隔符后的字符串access数据库
  • [2017-06-08] 【通用函数】Access判断Excel指定工作表是否存在access数据库
  • [2017-06-27] Access引用类库操作源码实例access数据库
  • [2017-06-14] 周而复始 -- 获取每月各周日期范围示例access数据库
  • [2017-08-10] 非ACCESS环境处理空值——自定义NZ函数access数据库
  • [2017-04-24] 通用模块:读取图片文件并保存到OLE字段中access数据库

热门产品

公司动态|在线留言|在线反馈|友情链接|会员中心|站内搜索|网站地图

Access交流网 版权所有 1999-2018 粤ICP备10043721号

QQ:18449932

Access应用 Access培训 Access开发 Access平台

access|数据库|access下载|access教程|access视频|access软件

Powered by MetInfo 5.3.12 ©2008-2023  www.metinfo.cn