我在支票程序中用如下语句转化大写,一般情况下没什么问题,但是到千位和十位都是零的时候,千位的零不显示。结果被银行退回来了,郁闷啊。举例:30801,我的软件显示为“叁万捌佰零壹圆整”,银行认为是“叁万零捌佰零壹圆整”。
跪求各位高手帮我看看下面的语句。谢谢! 我知道问题出在倒数第五行,但不知道怎么在现有结构基础上修改,请高手帮忙! c1 = "零壹贰叁肆伍陆柒捌玖"
c2 = "拾佰仟"
Private Function rmb(s As Currency) As String
Dim str0 As String, strFen As String, strYuan As String, strWan As String, strYi As String
Dim strWanYi As String
Dim strTemp As String
Dim Lpoint As Integer
Dim flag As Boolean
If Abs(s) < 0.01 Then rmb = "零": Exit Function
str0 = LTrim(str$(Abs(s)))
Lpoint = InStrRev(str0, ".")
If Lpoint = 0 Then
str0 = str0 & ".00"
Else
str0 = Left(str0 & "00", Lpoint + 2)
End If
strFen = Right(str0, 2)
strYuan = Left(str0, Len(str0) - 3)
If Val(strYuan) = 0 Then flag = True
If Len(strYuan) > 4 Then
strWan = Left(strYuan, Len(strYuan) - 4)
strYuan = Right(strYuan, 4)
End If
If Len(strWan) > 4 Then
strYi = Left(strWan, Len(strWan) - 4)
strWan = Right(strWan, 4)
End If
If Len(strYi) > 4 Then
strWanYi = Left(strYi, Len(strYi) - 4)
strYi = Right(strYi, 4)
End If
If Right(strFen, 1) = "0" Then
strTemp = "整"
If Left(strFen, 1) <> "0" Then strTemp = Mid(c1, Val(Left(strFen, 1)) + 1, 1) & "角整"
Else
If Left(strFen, 1) = "0" Then
If flag Then
strTemp = Mid(c1, Val(Right(strFen, 1)) + 1, 1) & "分"
Else
strTemp = "零" & Mid(c1, Val(Right(strFen, 1)) + 1, 1) & "分"
End If
Else
strTemp = Mid(c1, Val(Left(strFen, 1)) + 1, 1) & "角" & Mid(c1, Val(Right(strFen, 1)) + 1, 1) & "分"
End If
End If
If strYuan <> "" Then strTemp = change(strYuan) & "元" & strTemp
If strWan <> "" And Val(strWan) <> 0 Then strTemp = change(strWan) & "万" & strTemp
If strYi <> "" Then strTemp = change(strYi) & "亿" & strTemp
If strWanYi <> "" Then strTemp = change(strWanYi) & "万" & strTemp
rmb = strTemp
Exit Function
End FunctionPrivate Function change(s As String) As String
Dim c As String, str As String
Dim L As Integer, i As Integer
Dim f1 As Boolean, f2 As Boolean
str = ""
f1 = False
f2 = False
L = Len(s)
If Right(s, 1) <> "0" Then
str = Mid(c1, Val(Right(s, 1)) + 1, 1)
f1 = True
End If
For i = L - 1 To 1 Step -1
c = Mid(s, i, 1)
If c <> "0" Then
str = Mid(c1, Val(c) + 1, 1) & Mid(c2, L - i, 1) & str
f1 = True
Else
If f1 And (Not f2) Then str = "零" & str: f2 = True
End If
Next i
change = str
End Function
跪求各位高手帮我看看下面的语句。谢谢! 我知道问题出在倒数第五行,但不知道怎么在现有结构基础上修改,请高手帮忙! c1 = "零壹贰叁肆伍陆柒捌玖"
c2 = "拾佰仟"
Private Function rmb(s As Currency) As String
Dim str0 As String, strFen As String, strYuan As String, strWan As String, strYi As String
Dim strWanYi As String
Dim strTemp As String
Dim Lpoint As Integer
Dim flag As Boolean
If Abs(s) < 0.01 Then rmb = "零": Exit Function
str0 = LTrim(str$(Abs(s)))
Lpoint = InStrRev(str0, ".")
If Lpoint = 0 Then
str0 = str0 & ".00"
Else
str0 = Left(str0 & "00", Lpoint + 2)
End If
strFen = Right(str0, 2)
strYuan = Left(str0, Len(str0) - 3)
If Val(strYuan) = 0 Then flag = True
If Len(strYuan) > 4 Then
strWan = Left(strYuan, Len(strYuan) - 4)
strYuan = Right(strYuan, 4)
End If
If Len(strWan) > 4 Then
strYi = Left(strWan, Len(strWan) - 4)
strWan = Right(strWan, 4)
End If
If Len(strYi) > 4 Then
strWanYi = Left(strYi, Len(strYi) - 4)
strYi = Right(strYi, 4)
End If
If Right(strFen, 1) = "0" Then
strTemp = "整"
If Left(strFen, 1) <> "0" Then strTemp = Mid(c1, Val(Left(strFen, 1)) + 1, 1) & "角整"
Else
If Left(strFen, 1) = "0" Then
If flag Then
strTemp = Mid(c1, Val(Right(strFen, 1)) + 1, 1) & "分"
Else
strTemp = "零" & Mid(c1, Val(Right(strFen, 1)) + 1, 1) & "分"
End If
Else
strTemp = Mid(c1, Val(Left(strFen, 1)) + 1, 1) & "角" & Mid(c1, Val(Right(strFen, 1)) + 1, 1) & "分"
End If
End If
If strYuan <> "" Then strTemp = change(strYuan) & "元" & strTemp
If strWan <> "" And Val(strWan) <> 0 Then strTemp = change(strWan) & "万" & strTemp
If strYi <> "" Then strTemp = change(strYi) & "亿" & strTemp
If strWanYi <> "" Then strTemp = change(strWanYi) & "万" & strTemp
rmb = strTemp
Exit Function
End FunctionPrivate Function change(s As String) As String
Dim c As String, str As String
Dim L As Integer, i As Integer
Dim f1 As Boolean, f2 As Boolean
str = ""
f1 = False
f2 = False
L = Len(s)
If Right(s, 1) <> "0" Then
str = Mid(c1, Val(Right(s, 1)) + 1, 1)
f1 = True
End If
For i = L - 1 To 1 Step -1
c = Mid(s, i, 1)
If c <> "0" Then
str = Mid(c1, Val(c) + 1, 1) & Mid(c2, L - i, 1) & str
f1 = True
Else
If f1 And (Not f2) Then str = "零" & str: f2 = True
End If
Next i
change = str
End Function
?up("30801")
叁万零捌佰零壹元
*************************************************
Function Up(Dxs As String) As String
'检测为空时
If Trim(Dxs) = "" Then
MsgBox "没有数字,不能转换!", vbOKOnly + 32
Exit Function
End If
Dim Sw As Integer, SzP As Integer, SzUp As Integer, TempStr As String, DXStr As String
Sw = Len(Trim(Dxs))
SzP = InStr(1, Trim(Dxs), ".")
If SzP = 0 Then
Dim i As Integer
For i = 1 To Sw
TempStr = right(Trim(Dxs), i)
TempStr = left(TempStr, 1)
TempStr = Converts(TempStr)
Select Case i
Case 1
If TempStr = "零" Then
TempStr = "元"
Else
TempStr = TempStr + "元"
End If
Case 2
If TempStr = "零" Then
TempStr = "零"
Else
TempStr = TempStr + "拾"
End If
Case 3
If TempStr = "零" Then
TempStr = "零"
Else
TempStr = TempStr + "佰"
End If
Case 4
If TempStr = "零" Then
TempStr = "零"
Else
TempStr = TempStr + "仟"
End If
Case 5
If TempStr = "零" Then
TempStr = "万"
Else
TempStr = TempStr + "万"
End If
Case 6
If TempStr = "零" Then
TempStr = "零"
Else
TempStr = TempStr + "拾"
End If
Case 7
If TempStr = "零" Then
TempStr = "零"
Else
TempStr = TempStr + "佰"
End If
Case 8
If TempStr = "零" Then
TempStr = "零"
Else
TempStr = TempStr + "仟"
End If
Case 9
If TempStr = "零" Then
TempStr = "亿"
Else
TempStr = TempStr + "亿"
End If
End Select
Dim TempA As String
TempA = left(Trim(DXStr), 1)
If TempStr = "零" Then
Select Case TempA
Case "零"
DXStr = DXStr
Case "元"
DXStr = DXStr
Case "万"
DXStr = DXStr
Case "亿"
DXStr = DXStr
Case Else
DXStr = TempStr + DXStr
End Select
Else
DXStr = TempStr + DXStr
End If
Next
Else
For i = 1 To SzP - 1
TempStr = right(Trim(Dxs), i + (Sw - SzP + 1))
TempStr = left(TempStr, 1)
TempStr = Converts(TempStr)
Select Case i
Case 1
If TempStr = "零" Then
TempStr = "元"
Else
TempStr = TempStr + "元"
End If
Case 2
If TempStr = "零" Then
TempStr = "零"
Else
TempStr = TempStr + "拾"
End If
Case 3
If TempStr = "零" Then
TempStr = "零"
Else
TempStr = TempStr + "佰"
End If
Case 4
If TempStr = "零" Then
TempStr = "零"
Else
TempStr = TempStr + "仟"
End If
Case 5
If TempStr = "零" Then
TempStr = "万"
Else
TempStr = TempStr + "万"
End If
Case 6
If TempStr = "零" Then
TempStr = "零"
Else
TempStr = TempStr + "拾"
End If
Case 7
If TempStr = "零" Then
TempStr = "零"
Else
TempStr = TempStr + "佰"
End If
Case 8
If TempStr = "零" Then
TempStr = "零"
Else
TempStr = TempStr + "仟"
End If
Case 9
If TempStr = "零" Then
TempStr = "亿"
Else
TempStr = TempStr + "亿"
End If
Case Else
'超过999999999时自动删除
TempStr = ""
End Select
TempA = left(Trim(DXStr), 1)
If TempStr = "零" Then
Select Case TempA
Case "零"
DXStr = DXStr
Case "元"
DXStr = DXStr
Case "万"
DXStr = DXStr
Case "亿"
DXStr = DXStr
Case Else
DXStr = TempStr + DXStr
End Select
Else
DXStr = TempStr + DXStr
End If
Next
'计算小数
Dim DxstrX As String, XStr As String
XStr = right(Trim(Dxs), Sw - SzP)
For i = 1 To Sw - SzP
TempStr = left(XStr, i)
TempStr = right(TempStr, 1)
TempStr = Converts(TempStr)
Select Case i
Case 1
If TempStr = "零" Then
TempStr = ""
Else
TempStr = TempStr + "角"
End If
Case 2
If TempStr = "零" Then
TempStr = ""
Else
TempStr = TempStr + "分"
End If
Case Else
'超过两位小数时,自动删除
TempStr = ""
End Select
DxstrX = DxstrX + TempStr
Next
DXStr = DXStr + DxstrX
End If
Up = DXStr
End FunctionFunction Converts(NumStr As String) As String
Select Case Val(NumStr)
Case 0
Converts = "零"
Case 1
Converts = "壹"
Case 2
Converts = "贰"
Case 3
Converts = "叁"
Case 4
Converts = "肆"
Case 5
Converts = "伍"
Case 6
Converts = "陆"
Case 7
Converts = "柒"
Case 8
Converts = "捌"
Case 9
Converts = "玖"
End Select
End Function
http://community.csdn.net/Expert/topic/5291/5291672.xml?temp=.4437372
http://community.csdn.net/Expert/topic/5290/5290745.xml?temp=.6544153我写的一个财务软件里面用的,直接扒下来的函数,还热的呢
源码
银行怎么叫:either 元壹角贰分 or 零元壹角贰分 or 壹角贰分
local stringvar array aCng:=["","拾","佰","仟","萬","拾","佰","仟","亿","拾"];
local stringvar array aCnl:=["角","分"];
local stringvar sTotalamt;
local stringvar sLc;
local stringvar sRc;
local stringvar sResult;
local numbervar i;sTotalamt:=replace(totext(cdbl({apupurheadreff.ptot}),2),",","");
//stotalamt:="1020001.08";sLc:=StrReverse(split(sTotalamt,".",2)[1]);
sRc:=split(sTotalamt,".",2)[2];sResult:="";
for i:=1 to length(sLc) do
(
if sLc[i]="0" then
(
if Right(sResult,1)<>"零" and sResult<>"" then
sResult:=sResult & "零";
)
else
sResult:=sResult & aCng[i] & aChr[int(tonumber(sLc[i]))];
); if sResult<>"" then
sResult:=StrReverse(sResult) & "元";for i:=1 to length(sRc) do
(
if sRc[i]<>"0" then
sResult:=sResult & aChr[int(tonumber(sRc[i]))] & aCnl[i];
);
"合计:" & sResult & "整";
http://community.csdn.net/Expert/TopicView3.asp?id=5291672
http://community.csdn.net/Expert/TopicView3.asp?id=5290745
http://community.csdn.net/Expert/TopicView3.asp?id=5291672
http://community.csdn.net/Expert/TopicView3.asp?id=5290745我测试过,上面的链接中的Code可以用,稍微改一点。
EnToCh("23, 532, 329.03")=贰仟叁佰伍拾叁万贰仟叁佰贰拾玖元零叁分
EnToCh支持“,”good luck!
============================================================
对,完全可以通过前期的预处理把数据整理成简单有效的格式
至于数字中间的逗号,其实最简单不过了,一个REPLACE就消失了
Please update your code for LZ and us.
http://blog.csdn.net/northwolves/archive/2004/05/30/19599.aspxFunction daxie(money As String) As String '
Dim x As String, y As String
Const zimu = ".sbqwsbqysbqwsbq" '定义位置代码
Const letter = "0123456789sbqwy.zjf" '定义汉字缩写
Const upcase = "零壹贰叁肆伍陆柒捌玖拾佰仟萬億圆整角分" '定义大写汉字
Dim temp As String
temp = money
If InStr(temp, ".") > 0 Then temp = Left(temp, InStr(temp, ".") - 1)If Len(temp) > 16 Then MsgBox "数目太大,无法换算!请输入一亿亿以下的数字", 64, "错误提示": Exit Function '只能转换一亿亿元以下数目的货币!x = Format(money, "0.00") '格式化货币
y = ""
For i = 1 To Len(x) - 3
y = y & Mid(x, i, 1) & Mid(zimu, Len(x) - 2 - i, 1)
Next
If Right(x, 3) = ".00" Then
y = y & "z" '***元整
Else
y = y & Left(Right(x, 2), 1) & "j" & Right(x, 1) & "f" '*元*角*分
End If
y = Replace(y, "0q", "0") '避免零千(如:40200肆萬零千零贰佰)
y = Replace(y, "0b", "0") '避免零百(如:41000肆萬壹千零佰)
y = Replace(y, "0s", "0") '避免零十(如:204贰佰零拾零肆)Do While y <> Replace(y, "00", "0")
y = Replace(y, "00", "0") '避免双零(如:1004壹仟零零肆)
Loop
y = Replace(y, "0y", "y") '避免零億(如:210億 贰佰壹十零億)
y = Replace(y, "0w", "w") '避免零萬(如:210萬 贰佰壹十零萬)
y = IIf(Len(x) = 5 And Left(y, 1) = "1", Right(y, Len(y) - 1), y) '避免壹十(如:14壹拾肆;10壹拾)
y = IIf(Len(x) = 4, Replace(y, "0.", ""), Replace(y, "0.", ".")) '避免零元(如:20.00贰拾零圆;0.12零圆壹角贰分)For i = 1 To 19
y = Replace(y, Mid(letter, i, 1), Mid(upcase, i, 1)) '大写汉字
Next
daxie = y
End FunctionPrivate Sub Command1_Click()
MsgBox daxie("30801") ' return: 叁万零捌佰零壹圆整
End Sub