莫相离 发表于 2015-1-16 22:27:58

MYSQL编程:将阿拉伯数字转换为汉字数字,撑持到百万...

MySQL数据库归MySQLAB公司所有,但是这个软件是开源的,有一个MySQL学习教程可以免费下载。稍俱常识的新入门者都可以轻松实现在一个常见硬件上安装和配置MySQL。例子:
Debug.PrintUpNumber(-10556765765555.45,0,True)
显现为:
负壹拾万伍仟伍佰陆拾柒亿陆仟伍佰柒拾陆万伍仟伍佰伍拾伍圆肆角零分

PublicFunctionUpNumber(ByValNumberAsDouble,OptionalByValTypAsLong,OptionalByValIsMoneyAsBoolean)AsString
********************************************************************************
--------------------------------------------------------------------------------
将阿拉伯数字转换为年夜写字符串
Version1.02002-02-06
Version1.12002-04-05修正到撑持到千亿
Version1.22004-08-14修正为撑持Typ,IsMoney参数,转换了局能够不是金额,撑持到百万亿
Roadbeg
--------------------------------------------------------------------------------

--------------------------------------------------------------------------------
参数申明:
Number待转换的数字,能够是小数.
Typ转换范例,可选值0,1
0转换为零,壹,贰等
1转换为一,二,三等
IsMoney是不是是金额,假如是,则转换为几元,小数后转换为几角,分,反之则转换为相似于"二点三"这类情势
--------------------------------------------------------------------------------

--------------------------------------------------------------------------------
前往值申明:
假如乐成,前往转换后的字符串
假如失利,前往空字符串
--------------------------------------------------------------------------------

--------------------------------------------------------------------------------
注重,此函数最年夜只撑持到百万亿
没有对Typ的值举行反省,假如Typ不为0,1之一,将会激发毛病.
另,因为Double范例数值局限的缘故原由,凌驾百万亿,将不克不及显现小数,一样的凌驾十万亿只能显现一个小数,以此类推.
--------------------------------------------------------------------------------
********************************************************************************
OnErrorGoToDoerr
DimResultAsString前往值
DimstrNumberAsString文本型的Number
DimlngNumberLenAsLong文本型的Number的Len

DimstrTmpAsString
DimstrFirstAsString,strEndAsString
DimlngIAsLong,lngJAsLong,lngTmpAsLong
DimstrNum(10)AsString年夜写数字
DimstrUnit(16)AsString单元,好比十,拾,万等
DimstrUnitB(2)AsString小数后的单元

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

IfIsMoneyThen
strUnit(0)="圆"
strUnitB(0)="角":strUnitB(1)="分"
Else
strUnit(0)="点"
EndIf

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)="仟"

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

IfIsMoneyThen
strUnit(0)="元"
strUnitB(0)="角":strUnitB(1)="分"
Else
strUnit(0)="点"
EndIf

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)="千"

CaseElse
参数毛病
GoToErrexit
EndSelect

Result=""
IfNumber=0Then
IfIsMoneyThen
Result=strNum(0)&strUnit(0)&"整"
Else
Result=strNum(0)
EndIf
Else
IfIsMoneyThen
strNumber=Trim(str(FormatCurrency(Number,2,vbTrue,vbFalse,vbFalse)))保存两位小数
Else
strNumber=Trim(str(Number))复杂的转换为字符串型
EndIf
lngNumberLen=Len(strNumber)

IfLeft(strNumber,1)="-"Then处置正数
strFirst="负"
strNumber=Right(strNumber,lngNumberLen-1)
lngNumberLen=lngNumberLen-1
Else
strFirst=""一般不必要=""
EndIf

lngI=InStrRev(strNumber,".")
IflngIThen
strTmp=Right(strNumber,lngNumberLen-lngI)
IfIsMoneyThen
strTmp=strTmp&"00"
strEnd=""一般不必要=""

ForlngJ=1To2
Result=Result&strNum(CLng(Mid$(strTmp,lngJ,1)))&strUnitB(lngJ-1)
Next
Else
strTmp=Right(strNumber,lngNumberLen-lngI)
ForlngJ=1TolngNumberLen-lngI
Result=Result&strNum(CLng(Mid$(strTmp,lngJ,1)))
Next
EndIf

strNumber=Left(strNumber,lngI-1)往除小数部分
lngNumberLen=Len(strNumber)新的字符串长度
Else
IfIsMoneyThen
strEnd="整"
Else
strEnd=""
EndIf
EndIf

以下为主轮回部分
lngI=0
ForlngJ=lngNumberLenTo1Step-1
lngTmp=CLng(Mid$(strNumber,lngJ,1))

IflngTmpThen
Result=strNum(lngTmp)&strUnit(lngI)&Result
Else
IflngI=0OrlngI=4OrlngI=8OrlngI=12Then凌驾16位不撑持
Result=strNum(lngTmp)&strUnit(lngI)&Result
Else
Result=strNum(lngTmp)&Result
EndIf
EndIf

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))零零","零

IfIsMoneyThen
Result=strFirst&Result&strEnd
Else
IfRight(Result,1)=strUnit(0)ThenResult=Left(Result,Len(Result)-1)往除最初一个"点"
EndIf
EndIf
Complete:
GoToQuit
Doerr:
Errexit:
Result=""
Quit:
UpNumber=Result
EndFunction

如果你需要额外的功能的话,MySQL的普及性实际上可以让你发现总有一个厂商会提供准确的解决方案,而这个方案会满足你的需要和需求。

莫相离 发表于 2015-1-18 06:19:59

很多书籍啊,不过个人认为看书太慢,还不如自己学。多做实际的工具,就会遇到很多问题,网上搜下解决问题。不断重复这个过程,在配合sql的F1功能。

乐观 发表于 2015-1-21 12:19:17

对递归类的树遍历很有帮助。个人感觉这个真是太棒了!阅读清晰,非常有时代感。

admin 发表于 2015-1-30 17:50:56

理解了存储结构,再阅读下性能优化的章节基本上会对sqlserver有个清晰地认识

小妖女 发表于 2015-2-6 14:41:41

一个百万级别的基本信息表A,一个百万级别的详细记录表B,A中有个身份证id,B中也有身份id;先要找出A中在B的详细记录。

活着的死人 发表于 2015-2-16 16:47:05

两个月啃那本sqlserver2005技术内部-存储引擎,花了几个月啃四本书

山那边是海 发表于 2015-3-5 07:32:58

多走走一此相关论坛,多看一些实例开发,多交流0经验,没什么的,我也是刚学没多久!加油

分手快乐 发表于 2015-3-12 00:32:18

原来公司用过MYSQL自己也只是建个表写个SQL

谁可相欹 发表于 2015-3-19 17:15:27

不好!如果出了错;不好调试;不好处理!其实web开发将代码分为3层:web层;业务逻辑层和数据访问层;一般对数据库的操作都在数据访问层来做;这样便于调试和维护!而且将来如果是换了数据库的话;你只需要改数据层的代码;其他层的基本可以不变!要是你在jsp中直接调用sql数据库;那么如果换了数据库呢?岂不都要改?如果报了异常呢?怎么做异常处理?

金色的骷髅 发表于 2015-3-29 16:41:31

其实可以做一下类比,Oracle等数据库产品老早就支持了java编程,而且提供了java池参数作为用户配置接口。但是现在有哪些系统大批使用了java存储过程?!连Oracle自己的应用都不用为什么?!
页: [1]
查看完整版本: MYSQL编程:将阿拉伯数字转换为汉字数字,撑持到百万...