前言:
眼前各位老铁们对“c语言求绝对值保留两位小数”大概比较关切,你们都想要学习一些“c语言求绝对值保留两位小数”的相关知识。那么小编同时在网摘上网罗了一些有关“c语言求绝对值保留两位小数””的相关文章,希望姐妹们能喜欢,朋友们一起来学习一下吧!本文于2023年10月21日首发于本人同名公众号:VBA编程实战,更多文章案例请搜索关注!
内容提要
数字转中文大写金额自定义函数
大家好,我是冷水泡茶,最近有点忙,疏于更新,请谅解。
今天给大家分享一个自定义函数:数字转大写金额
有关数字转大写金额的方法有好多种,最简洁的一种方法是利用工作表函数Text,把数字转换成中文大写,再处理一下元角分,这个函数在我们公众号里也分享过。
今天分享的是我自己刚写的,可能有人会觉得有点多余,人家都写好了,何必多此一举呢?我倒不是这样看,一个问题,从不同的角度去看,采用不同的方法去解决,对我们的思维能力是一种锻炼。下面,我们就一起来看看吧。
基本思路与实现过程
1、我们把0~9的数字对应的中文金额大写字符放到一个数组里。
2、再把元角分,拾佰仟等单位也对应放到一个数组里。
3、我们把数字拆分成单独的字符,并将对应的大写字符、单位字符进行组合,存到数组里。
4、把数组所有元素连接在一起,形成一个基本的大写金额字符串strNum。
5、处理特殊情况,比如两个以上“零”、“整”、负数等。
VBA代码
在模块1里,NumToChar自定义函数:
Function NumToChar(Number As Double) As String Dim strNum As String Dim arrNum(), arrChar(), arrUnits(), arr() Dim k As Integer Temp = Abs(Round(Number, 2)) * 100 strNum = CStr(Temp) arrChar = Array("零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖") arrUnits = Array("分", "角", "元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "兆", "拾", "佰", "仟", "京") For i = Len(strNum) To 1 Step -1 ReDim Preserve arr(k) arr(k) = Mid(strNum, i, 1) If arr(k) = 0 Then If InStr("元万亿兆", arrUnits(k)) Then arr(k) = arrUnits(k) Else arr(k) = "零" End If Else arr(k) = arrChar(arr(k)) & arrUnits(k) End If k = k + 1 Next strNum = "" For i = UBound(arr) To LBound(arr) Step -1 strNum = strNum & arr(i) Next If Round(Number, 0) = Number Then strNum = Left(strNum, InStr(strNum, "元")) & "整" ElseIf Round(Number, 1) = Number Then strNum = Left(strNum, InStr(strNum, "角")) & "整" End If Do While InStr(strNum, "零零") > 0 strNum = Replace(strNum, "零零", "零") Loop strNum = Replace(strNum, "零兆", "兆") strNum = Replace(strNum, "零亿", "亿") strNum = Replace(strNum, "零万", "万") strNum = Replace(strNum, "零元", "元") strNum = Replace(strNum, "兆亿", "兆") strNum = Replace(strNum, "兆万", "兆") strNum = Replace(strNum, "亿万", "亿") If Number < 0 Then strNum = "负" & strNum ElseIf Number = 0 Then strNum = "零元整" End If NumToChar = strNumEnd Function
代码解析:
1、line5~6,把数字保留两位小数,取绝对值再乘上100,目的是剔除负号、小数点的影响。再把数字转换成字符串strNum。
2、line9~22,循环strNum字符串的长度到1,依次截取一个字符存到数组arr里。如果数字为0,则如果对应的单位是“元万亿兆”,则把单位存到数组里,如果不是,则存字符“零”到数组里,如果数字不为0,则把其对应的中文大写字符与单位组合起来,存到数组中。
3、line24~26,把数组arr的所有元素连接起来,形成基本的中文大写字符。
4、line27~31,如果数字没有分、角的,在后面加“整”。
5、line32~34,把连续2个零替换为1个零。
6、line35~41,再替换掉不需要的字符。
7、line42~46,如果原始数据是负数,在前面加一个“负”字,如果是0,直接写成“零元整”。
8、这个自定义函数没有经过完全测试,不排除有Bug的可能性。如有发现,欢迎指正。
好,今天就这样,我们下期再会。
~~~~~~End~~~~~~
喜欢就点个赞、点在看、留言评论、分享一下呗!感谢支持!
案例文件分享说明:请关注本人同名VX公众号(VBA编程实战)了解文件获取方式,免费!
标签: #c语言求绝对值保留两位小数 #vba强制转换成double