| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1346 人关注过本帖
标题:转换
只看楼主 加入收藏
nmhfs
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2012-11-8
结帖率:71.43%
收藏
 问题点数:0 回复次数:27 
转换
如何将数字转换成中文大写 如:1245.00 ==》 壹仟贰佰肆拾伍元整
搜索更多相关主题的帖子: 中文大写 如何 
2012-11-18 13:40
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:0 
程序代码:
Procedure RmbDx
  Parameter my_n
  If my_n<0
   FC=''
  Else
   FC=''
  Endif
  yjf="分角元拾佰仟万拾佰仟亿拾佰仟"
  s_str="[零分][零角][零拾][零佰][零仟][零零]"
  d_str="[零亿][零万][零元]"
  shuzi="零壹贰叁肆伍陆柒捌玖"
  sss=Alltrim(Str(Int(my_n*100), 30))
  dx=""
  For I=1 To Len(sss)
   c=Substr(sss,Len(sss)-I+1,1)
   dx=Substr(shuzi,Val(c)*2+1,2)+Substr(yjf,I*2-1,2)+dx
  Endfor
  dxl=Len(dx)
  myexit=.T.
  Do While .T.
   For ii=1 To dxl Step 2
    If Substr(dx,ii,4)$s_str.And.Len(Substr(dx,ii,4))=4
     myexit=.F.
     Exit
    Else
     myexit=.T.
    Endif
   Endfor
   If myexit=.F.
    dx=Substr(dx,1,ii+1)+Substr(dx,ii+4,dxl-(ii+3))
    dxl=Len(dx)
   Else
    Exit
   Endif
  Enddo
  *
  dxl=Len(dx)
  myexit=.T.
  Do While .T.
   For ii=1 To dxl Step 2
    If Substr(dx,ii,4)$d_str.And.Len(Substr(dx,ii,4))=4
     myexit=.F.
     Exit
    Else
     myexit=.T.
    Endif
   Endfor
   If myexit=.F.
    dx=Substr(dx,1,ii-1)+Substr(dx,ii+2,dxl-(ii+1))
    dxl=Len(dx)
   Else
    Exit
   Endif
  Enddo
  yw_wz=At("亿万",dx)
  If yw_wz>0
   dx=Substr(dx,1,yw_wz+1)+Substr(dx,yw_wz+4,Len(dx)-(yw_wz+3))
  Endif
  If Right(dx,2)="零"
   Do Case
    Case Len(dx)>2
     dx=Left(dx,Len(dx)-2)+''
    Case Len(dx)<3
     dx=""
   Endcase
  Endif
  If FC=''
   dx=FC+(Substr(dx,3,Len(dx)-2))
  Endif
  Return(dx)
ENDPROC
用这个函数
2012-11-18 14:26
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
10亿元以内转换的可用下面的程序:
je0=int(金额)               &&取整数部份
je1=金额-je0                &&取小数部份
je1=je1*100                 &&将小数变为两位整数
jec=alltr(str(je0))         &&将整数部份由数值型转换为字符型
ws=len(jec)                 &&计算整数部份长度
sz='零壹贰叁肆伍陆柒捌玖拾'   &&汉字数字
dw='元拾佰仟万拾佰仟亿拾佰仟' &&汉字单位
if je1>0                    &&进行小数部份转换
if je1>9                    &&角位不为零
jed=subs(sz,int(je1/10)*2+1,2)+'角'
else                        &&角位为零
jed='零'
endif
je1=je1-int(je1/10)*10      &&计算分位
if je1>0                    &&分大于零
jed=jed+subs(sz,je1*2+1,2)+'分'
else
jed=jed+'整'
endif
else
jed='整'                    &&角分位为零
endif
w0=.t.                      &&判断是否有连续零时使用
for i=1 to ws               &&转换整数部份
s1=val(subs(jec,ws-i+1,1))  &&取出当前位
if s1=0                     &&本位为零
if i=1.or.i=5.or.i=9        &&在元、万、亿位上
jed=subs(dw,i*2-1,2)+jed    &&加单位、不加零
else
if w0                       &&非连续零
jed='零'+jed                &&加零不加单位
endif
endif
w0=.f.                      &&置已经有一个零标志
else                        &&本位不为零
jed=subs(sz,s1*2+1,2)+subs(dw,i*2-1,2)+jed
w0=.t.                      &&置非零标志
endif
endfor
repl 大写 with jed          &&将大写金额赋予字段"大写"


活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2012-11-18 21:18
月沐庭轩
Rank: 9Rank: 9Rank: 9
来 自:京城
等 级:贵宾
威 望:17
帖 子:393
专家分:1106
注 册:2011-7-24
收藏
得分:0 
以前在网上找到的,现在一直在用(可以在一万亿元范围内用):
程序代码:
*******************************
*程序名称: ZBSTRJE.PRG
*功    能: 大写金额转换模块
*编    制: esailor(1999.12.31)
*******************************
PARAMETERS TMP_N
PRIVATE ALL LIKE TMP_*
IF TMP_N=0
   RETURN "零元整"
ENDIF
TMP_S1=IIF(TMP_N>0,"","(负)")
TMP_N=IIF(TMP_N>0,TMP_N,-TMP_N)
IF TMP_N>1000000000000
   RETURN "超过"+TMP_S1+"壹万亿元"
ENDIF
TMP_STDT="仟佰拾亿仟佰拾万仟佰拾元角分"
TMP_STDC="零壹贰叁肆伍陆柒捌玖"
TMP_S0=STR(TMP_N*100,14)
TMP_I0=14-LEN(LTRIM(TMP_S0))+1
FOR TMP_I=TMP_I0 TO 14
    TMP_BIT=VAL(SUBSTR(TMP_S0,TMP_I,1))
    TMP_T=SUBSTR(TMP_STDT,TMP_I*2-1,2)
    IF TMP_BIT=0
       TMP_S1=IIF(RIGHT(TMP_S1,2)="零",TMP_S1,TMP_S1+"零")
       IF TMP_I=4 .OR. TMP_I=12 .OR.(TMP_I=8 .AND. .NOT.RIGHT(TMP_S1,4)="亿零")
          IF RIGHT(TMP_S1,2)="零"
             TMP_S1=SUBSTR(TMP_S1,1,LEN(TMP_S1)-2)
             TMP_S1=TMP_S1+TMP_T
             TMP_S1=TMP_S1+"零"
          ELSE
             TMP_S1=TMP_S1+TMP_T
          ENDIF
       ENDIF
    ELSE
       TMP_S1=TMP_S1+SUBSTR(TMP_STDC,TMP_BIT*2+1,2)+TMP_T
    ENDIF
ENDFOR
IF .NOT.RIGHT(TMP_S1,2)="分"
   IF RIGHT(TMP_S1,2)=''
      TMP_S1=LEFT(TMP_S1,LEN(TMP_S1)-2)
   ENDIF
   TMP_S1=TMP_S1+''
ENDIF
RETURN TMP_S1


[ 本帖最后由 月沐庭轩 于 2012-11-19 08:53 编辑 ]

坚持学习vfp,QQ:306805680
2012-11-19 08:51
cxzbzgz
Rank: 8Rank: 8
来 自:云南楚雄
等 级:贵宾
威 望:24
帖 子:298
专家分:808
注 册:2012-6-15
收藏
得分:0 
int i,lendec,lenint
string numstr,a,b,c,d,bbak
numstr=string(aje,"#0.00")
lenint=len(mid(numstr,1,pos(numstr,'.') - 1))
if right(numstr,2)='00' then
lendec=0
else
lendec=2
end if
string dxint[13],dxdec[2],sz[13]
string dxstr="万仟佰拾亿仟佰拾万仟佰拾元"
string szstr="零壹贰叁肆伍陆柒捌玖"
for i=1 to 13
dxint[i]=mid(dxstr,26 - i*2+1,2)
if i<11 then
sz[i]=mid(szstr,i*2 - 1,2)
else
sz[i]=" "
end if
next
dxdec[1]="角"
dxdec[2]="分"
dxstr=" "
for i = 1 to lenint
a = mid(mid(numstr,1,lenint),i,1)
b = sz[integer(a)+1]
c = dxint[lenint - i +1]
if dxstr<>" " then
d = mid(dxstr,len(dxstr) - 1 ,2)
else
d = " "
end if
if b="零" and (d="零" or b=bbak 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
dxstr=mid(dxstr,1,len(dxstr) - 2)
d = mid(dxstr,len(dxstr) - 1,2)
if (c="元" and d="万" or c="万"and d="亿") then c=""
end if
dxstr=dxstr + b + c
bbak = b
next
for i=1 to lendec
a = mid (mid(numstr,lenint+2,lendec),i,1)
if a="0" and dxdec[i]="分" then
b=""
else
b=sz[integer(a) + 1]
end if
if a<>"0" then
dxstr=dxstr+b+dxdec[i]
else
dxstr=dxstr+b
end if
next
if lendec=0 then dxstr=dxstr+"整"
return dxstr

学习交流VFP,QQ:248561326。
2012-11-19 11:14
jsyg
Rank: 2
等 级:论坛游民
威 望:1
帖 子:75
专家分:38
注 册:2012-10-20
收藏
得分:0 
我逐个测试了一下,没有一个能用的!
2012-11-20 03:07
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 TonyDeng 于 2012-11-20 03:35 编辑 ]

授人以渔,不授人以鱼。
2012-11-20 03:30
月沐庭轩
Rank: 9Rank: 9Rank: 9
来 自:京城
等 级:贵宾
威 望:17
帖 子:393
专家分:1106
注 册:2011-7-24
收藏
得分:0 
回复 6楼 jsyg
奇怪,把你测试的不成功的图发个来。

坚持学习vfp,QQ:306805680
2012-11-20 10:06
sdzhjf
Rank: 1
等 级:新手上路
帖 子:18
专家分:4
注 册:2012-9-7
收藏
得分:0 
***********************************************
* fp_RMB   数字->人民币  (最简最优化程序)
***********************************************
*最简最优化的人民币转换程序:
*  ?fp_RMB( 111.23 )      && 结果:壹佰壹拾壹元贰角叁分
*  ?fp_RMB( 100.03 )      && 结果:壹佰元零叁分
*  ?fp_RMB( 1002003.03 )  && 结果:壹佰万零贰仟零叁元零叁分
*  ?fp_RMB( 5000 )        && 结果:伍仟元整
*
*  ?fp_RMB(0.01)          && 结果:壹分
*  ?fp_RMB(0.1)           && 结果:壹角零分
*  ?fp_RMB(1)             && 结果:壹元整
*  ?fp_RMB(1001.01)       && 结果:壹仟零壹元零壹分
*  ?fp_RMB(101010100.01)  && 结果:壹亿零壹佰零壹万零壹佰元零壹分
*  ?fp_RMB(10110001010)   && 结果:壹佰零壹亿壹仟万零壹仟零壹拾元整
*----------------------------------------------------------------------------------------------
PROCEDURE fp_RMB
LPARAMETERS m_Value
IF m_Value>999999999999.99
   RETURN '*****'  && 超出可计算的范围
ENDIF
LOCAL m_Str,m_Return,i,j
m_Str=STR(INT(m_Value*100+0.5),14)  
m_Return=''  && 返回值
FOR i=14 TO 15-LEN(ALLTRIM(m_Str)) STEP -1
  j=VAL(SUBSTR(m_Str,i,1))  && 第i位的数值
  m_Return= IIF(j>0 ,SUBSTR('壹贰叁肆伍陆柒捌玖',j*2-1,2)+SUBSTR('仟佰拾亿仟佰拾万仟佰拾元角分',i*2-1,2),'') ;
          + IIF(j=0 and (i=12 OR i%4=0 AND VAL(SUBSTR(m_Str,i-3,4))>0),SUBSTR('亿万元',i/2-1,2),'') ;
          + IIF(j=0 and VAL(SUBSTR(m_Str,i+1,1))>0 ,'零','') + m_Return
ENDFOR
IF NOT '分'$m_Return
   m_Return=m_Return+IIF( '角'$m_Return ,'零分','整' )
ENDIF
RETURN m_Return
2012-11-20 12:35
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
有些所谓的最简写法是不合财务规矩的。

授人以渔,不授人以鱼。
2012-11-20 12:41
快速回复:转换
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024751 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved