谁有将人民币小写转成大写的C代码

foxman 2001-09-15 07:25:50
...全文
193 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
kbsoft 2002-02-25
  • 打赏
  • 举报
回复
本程序在VB6下通过

option Explicit
Dim a(0 To 13) As String
Private Sub sort(f As Double)
Dim k As Single, s As Integer, m As Double, r As Single, i As Double, j As Single
k = 10
Do
j = f * k
i = Fix(j)
s = s + 1
If (i <> j) Then
k = k * 10
Else
Exit Do
End If
Loop
m = 10 ^ (s - 1)
For i = 1 To s
r = Fix(j / m)
Print a(r);
j = j Mod m
m = m / 10
'Print j, m
Next i
End Sub

Private Sub Whole(temp As Integer)
Dim i As Integer, s As Integer, j As Integer
s = temp
For i = 1 To 5
Select Case s
Case Is > 10000
j = s \ 10000: s = s Mod 10000
Call print_char(j, 10001)
If (s = 0) Then Exit Sub
If (s < 1000) Then Print "零";
Case 1000 To 10000
j = s \ 1000: s = s Mod 1000
Call print_char(j, 1001)
If (s = 0) Then Exit Sub
If (s < 100) Then Print "零";
Case 100 To 1000
j = s \ 100: s = s Mod 100
Call print_char(j, 101)
If (s = 0) Then Exit Sub
If (s < 10) Then Print "零";
Case 10 To 100
j = s \ 10: s = s Mod 10
If (s = 0) Then Exit Sub
Call print_char(j, 11)
Case 0 To 10
j = s
Call print_char(j, 1)
If (s = 0) Then Exit Sub
Exit Sub
End Select
Next i
End Sub
Private Sub print_char(j As Integer, i As Integer)
Select Case i
Case Is > 10000
Print a(j) & a(13);
Case 1000 To 10000
Print a(j) & a(12);
Case 100 To 1000
Print a(j) & a(11);
Case 10 To 100
Print a(j) & a(10);
Case 0 To 10
Print a(j);
End Select
End Sub
Private Sub Form_Click()
Dim num As Double, f As Double, q As Integer, temp As Integer
a(0) = "零": a(1) = "壶": a(2) = "贰": a(3) = "叁": a(4) = "肆": a(5) = "伍"
a(6) = "陆": a(7) = "柒": a(8) = "捌": a(9) = "玖": a(10) = "拾": a(11) = "佰"
a(12) = "仟": a(13) = "万"
Form1.Cls
Do
num = InputBox("请输入一个在0到三万之间的任何一个数!", "转成汉字大写", 0)
If (num < 30001 And num >= 0) Then Exit Do
Loop
temp = Fix(num): f = num - temp
Print "你输入的数是" & num
If (f = 0) Then
Call Whole(temp)
Else
Call Whole(temp)
Print "点";
Call sort(f)
End If
End Sub
scklotz 2001-09-16
  • 打赏
  • 举报
回复
你要什么样的代码?我可以帮你写
SCUM 2001-09-16
  • 打赏
  • 举报
回复
请查旧贴
foxman 2001-09-16
  • 打赏
  • 举报
回复
回复scklotz(晓春) 
将小写金额转成大写金额的C代码。
kenvin 2001-09-16
  • 打赏
  • 举报
回复
作到这步,很难吗?
不见得吧?
zjlsct 2001-09-16
  • 打赏
  • 举报
回复
主  题:贴一个我写的自认为比较完美的转换人民币大写的函数.....
作  者:hugao
所属论坛:PowerBuilder
问题点数:20
回复次数:22
发表时间:2001-6-25 14:42:17


我半年前写的,自认为比较完美,如有人能找出毛病我就给分.
优点:可转换到千亿,大致无转换错误
缺点:当时我刚接触PB才一周,只会用DOUBLE类型(其实是不知道有没有更大的数值类型),所以没有做万亿级的转换部分.


/***************************************************************************
* 函数名称:f_get_rmbdx (全局类型) *
* 函数功能:将得到的(double)类型的数转换为(string)类型的 *
* 人民币大写字串,并返回这个字串。 *
* 函数原形:f_get_rmbdx(double rmbdx) *
****************************************************************************/

//******************初始化各变量*********************
string rmbdxstring='',zs='',xs='' //rmbdxstring 将要返回的人民币大写,zs 整数部分,xs 小数部分
string dwdx[0 to 3]={"","拾","佰","仟"} //单位大写
string szdx[0 to 9]={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"} //数值大写
integer n=0,zeroflag = 0,flag=0,wwflag=0,ywflag=0 //wwflag 为万位标志,ywflag 为亿位标志
//flag 为有无小数部分标志,zeroflag 为零位标志

//******************数值界限判定*********************
if rmbdx>999999999999999.99 then //要转换的数值rmbdx(人民币)
return "数值太大,无法转换"
end if
if rmbdx=0 then
return "零元整"
end if

//******************值串处理*************************
rmbdxstring=string(rmbdx)
for n=1 to len(rmbdxstring)
if mid(rmbdxstring,1,1)='-'then n++
if (mid(rmbdxstring,n,1))='.' then
n++
flag=1 //判断有无小数部分
exit
else
zs=zs+mid(rmbdxstring,n,1) //取整数部分
end if
next
if flag=1 then
xs=mid(rmbdxstring,n,2) //取小数部分
end if

rmbdxstring="" //清空 rmbdxstring

//****************将整数数值位转化大写*****************************
if zs<>'0' then //如zs='0'则一定是整数没有而小数部分有值
rmbdxstring=rmbdxstring+"元"
for n=len(zs) to 1 step -1
if mid(zs,n,1)<>'0' then //如果当前处理的位不为'0'时
if (len(zs)-n+1) > 4 and len(zs)-n+1 < 9 and wwflag=0 then //处理单位"万"
rmbdxstring="万"+rmbdxstring
wwflag=1
end if
if (len(zs)-n+1) > 8 and ywflag=0 then //处理单位"亿"
rmbdxstring="亿"+rmbdxstring
ywflag=1
end if
rmbdxstring=szdx[integer(mid(zs,n,1))]+dwdx[mod(len(zs)-n,4)]+rmbdxstring //转换相应位置的数的
zeroflag=1 //人民币大写字串
else //如果当前处理的位为'0'时
if zeroflag=1 and n<>len(zs) then //过滤掉最右边开始相连的'0',即中间与个位'0'不相关~
rmbdxstring="零"+rmbdxstring //的'0'可显示'零',但任意多个相连的'0'也只显示一个'零。
end if
zeroflag=0
end if
next
end if

//****************将小数数值位转化大写*****************************
if flag=1 then //当有小数位时
if len(xs)=1 then //当小数位只有一位时
rmbdxstring=rmbdxstring+szdx[integer(mid(xs,1,1))]+"角"
else //当小数位有两位时
if mid(xs,1,1)<>'0'then //处理角
rmbdxstring=rmbdxstring+szdx[integer(mid(xs,1,1))]+"角"
else
if zs<>"0" then
rmbdxstring=rmbdxstring+"零"
end if
end if
rmbdxstring=rmbdxstring+szdx[integer(mid(xs,2,1))]+"分" //处理分
end if
else //当没有小数位时加上'整'字
rmbdxstring=rmbdxstring+"整"
end if

//****************返回结果*****************************************
return rmbdxstring //返回人民币大写(string 形)

69,370

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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