【水晶报表函数集】货币大写

阿泰 2010-04-20 06:57:35
加精


水晶报表中如何创建和使用函数请参考:【水晶报表内功心法】--公式、函数与运行时总计

函数使用Basic语法



'#############################################################################
'货币转换为中文汉字表述
'
'函数名称:CNMoney
'参数:ls
'返回值:转换后的字符串
'
'整理人:阿泰
'版本历史
'2010-04-20:首次编译,修正0参数,修正小于10的值不能正常显示的BUG
'
'本文函数来源于 feng442624978,原帖地址:
'http://topic.csdn.net/u/20100303/15/0f0ceca7-d29d-4269-b0f5-17ea09d0f139.html
'#############################################################################

Function CNMoney(ls As Number) As String
Dim dx_sz As String
Dim dx_dw As String
Dim str_int As String
Dim str_dec As String
Dim dx_str As String
Dim fu As String
Dim a As String
Dim b As String
Dim c As String
Dim d As String
Dim b2 As String
Dim num_int As Number
Dim num_dec As Number
Dim len_int As Number
Dim i As Number
Dim a_int As Number
Dim pp As Number

dx_sz = "零壹贰叁肆伍陆柒捌玖"
dx_dw = "万仟佰拾亿仟佰拾万仟佰拾圆"

If ls = 0 Then
CNMoney = "零圆整"
Exit Function
End If

If ls < 0 Then
ls = Abs(ls)
fu = "负"
Else
fu = ""
End If

dx_str = CStr(ls)
dx_str = Replace(dx_str, "¥", "")
dx_str = Replace(dx_str, ",", "")
If (ls >= 0) And (ls < 1) Then dx_str = "0" + dx_str

pp = InStr(dx_str, ".")
If pp > 0 Then
str_int = Mid(dx_str, 1, InStr(dx_str, ".") - 1)
Else
str_int = dx_str
End If

num_int = tonumber(str_int)

If (ls > 0) And (ls < 1) Then
num_dec = ls * 100
Else
num_dec = (ls - num_int) * 100
End If

str_dec = totext(num_dec)
str_dec = Replace(str_dec, "¥", "")

len_int = Len(str_int)
dx_str = ""
For i = 1 To len_int
a = Mid(str_int, i, 1)
a_int = tonumber(a)
b = Mid(dx_sz, (a_int + 1), 1)
c = Mid(dx_dw, (13 - len_int + i), 1)
If dx_str <> "" Then
d = Mid(dx_str, Len(dx_str) - 1, 1)
Else
d = ""
End If
If (b = "零") And ((d = "零") Or (b = b2) Or (c = "圆") Or (c = "万") Or (c = "亿")) Then b = ""
If (a = "0") And (c <> "圆") And (c <> "万") And (c <> "亿") Then c = ""
If ((c = "圆") Or (c = "万") Or (c = "亿")) And (d = "零") And (a = "0") Then
dx_str = Mid(dx_str, 1, Len(dx_str) - 2)
d = Mid(dx_str, Len(dx_str) - 1, 2)
If ((c = "圆") And (d = "万")) Or ((c = "万") And (d = "亿")) Then c = ""
End If
dx_str = dx_str + b + c
b2 = b
Next i

'处理金额小于1的情况
If Len(dx_str) < 2 Then dx_str = ""
If (num_dec < 10) And (ls > 0) Then
a_int = tonumber(str_dec)
b = Mid(dx_sz, (a_int + 1), 1)
If num_dec = 0 Then dx_str = dx_str + "整"
If num_dec > 0 Then dx_str = dx_str + "零" + b + "分"
End If
If num_dec >= 10 Then
a_int = tonumber(Mid(str_dec, 1, 1))
a = Mid(dx_sz, (a_int + 1), 1)
a_int = tonumber(Mid(str_dec, 2, 1))
b = Mid(dx_sz, (a_int + 1), 1)
If a <> "零" Then a = a + "角"
If b <> "零" Then b = b + "分" Else b = ""
dx_str = dx_str + a + b
End If

dx_str = fu + dx_str

dx_str = Replace(dx_str, "零亿", "亿")
dx_str = Replace(dx_str, "零万", "万")
dx_str = Replace(dx_str, "零千", "千")
dx_str = Replace(dx_str, "零圆", "圆")


CNMoney = dx_str
End Function


...全文
1515 72 打赏 收藏 转发到动态 举报
写回复
用AI写文章
72 条回复
切换为时间正序
请发表友善的回复…
发表回复
hiphopthehook 2012-06-26
  • 打赏
  • 举报
回复
如果是 要”角“后面也要”整“ 如何达到呢
zqxin54 2011-07-22
  • 打赏
  • 举报
回复
学习,收藏
xuyunjun168 2011-04-18
  • 打赏
  • 举报
回复
这个函数有问题,你传2999.997试试!!
hsz0223 2010-11-17
  • 打赏
  • 举报
回复

学习中,但是我保存公式时,提示:必须为特殊变量“formula”分配一个公式内的值,请高手指点。 谢谢!
vbmscomm 2010-09-17
  • 打赏
  • 举报
回复
不错的饿方法
yyandsy 2010-09-17
  • 打赏
  • 举报
回复
先收着了哦
xxjltan 2010-08-02
  • 打赏
  • 举报
回复
公式不错,只是我们这边习惯了到角位没分的时候就要加"整"字,这个得再改良下,没"整"时也得加个"零分"
ruhemei 2010-07-05
  • 打赏
  • 举报
回复
谁知道 啊??
ruhemei 2010-07-05
  • 打赏
  • 举报
回复
自定义代码的第 0 行存在错误: [BC30389] “System.Number”是“Friend”,因此它在此上下文中不可访问。 D:\rhm\SGMS\SGMS\Report\Report1.rdlc SGMS

报这个错是什么意思啊???
wodessd5kaka 2010-04-27
  • 打赏
  • 举报
回复
写过类似的函数,当时不知道原来水晶报表也是这么搞的……
daxiao474 2010-04-27
  • 打赏
  • 举报
回复
水晶报表到底是个啥东西都还不晓得哦
masky5310 2010-04-27
  • 打赏
  • 举报
回复
不懂,顶一下!
walter8088 2010-04-27
  • 打赏
  • 举报
回复
不懂,顶一下!
ivfangwang_long 2010-04-26
  • 打赏
  • 举报
回复
学习了~~~~~~~~~~~~~~~~~~~~
sw7780423 2010-04-26
  • 打赏
  • 举报
回复
太难了,头晕了,倒地了,注水了!
blaine13 2010-04-26
  • 打赏
  • 举报
回复
好 谢了...因为这个函数 麻烦你很久多次了哈...
有点不好意思了...
easwq 2010-04-25
  • 打赏
  • 举报
回复
不错 顶一下
yinyuewuxian 2010-04-25
  • 打赏
  • 举报
回复
学习到了
  • 打赏
  • 举报
回复
这个方法很实用,正好我在做毕业设计的时候用上了。
enarc 2010-04-24
  • 打赏
  • 举报
回复
很实用的 谢啦
加载更多回复(48)

4,818

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 图表区
社区管理员
  • 图表区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧