当您需要做一个诸如出入库单的报表时,经常会用到人民币总金额的汇总,并希望打印出来的时候有人民币的大写,所以您需要插入一个sum函数来进行合计,那么合计出来的阿拉伯数字的人民币如何转换成中文大写呢?
以下代码将帮你完成人民币大写的转换,您必须添加一个字符串类型的未邦定字段到您的水晶报表,然后将上面您已经sum好的阿拉伯数字作为一个参数传递到下面代码中的函数。即得到了人民币的大写。
Function
ConvertRMB (ls
as
currency
)
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 currency
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
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
if ls = 0 then dx_str = " 零元整 "
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, " 零元 " , " 元 " )
ConvertRMB = dx_str
End Function
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 currency
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
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
if ls = 0 then dx_str = " 零元整 "
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, " 零元 " , " 元 " )
ConvertRMB = dx_str
End Function
HUST:Eric