注册 登录
编程论坛 VFP论坛

vfp中年月转大写,用什么函授,求回复。

蝈蝈大叔 发布于 2022-01-12 09:26, 2823 次点击
现在做报表打印,其中,字符型的阿拉伯数字年月日,需转换成大写打印,如何解决。如   1984  需要打印成一九八四
17 回复
#2
laowan0012022-01-12 09:36
这是要打证书啊
这种函数好像没见到现成的,自己做一个吧
#3
laowan0012022-01-12 09:44
程序代码:

FUNCTION numtoc
LPARAMETERS Pnum
LOCAL xretu,xcchr,ii,xnum,xpos
xcchr = '一二三四五六七八九0'

xretu = ''
xnum = TRANSFORM(Pnum)
FOR ii=1 TO LEN(xnum)
    xpos = VAL(SUBSTR(xnum,ii,1))
    IF xpos=0
        xpos = 10
    ENDIF
   
    xretu = xretu + SUBSTR(xcchr,xpos*2-1,2)
ENDFOR

RETURN xretu


其中的0如果不合适可以修改 xcchr = '一二三四五六七八九0' 中的0的字符

[此贴子已经被作者于2022-1-12 09:46编辑过]

#4
吹水佬2022-01-12 10:47
程序代码:
ALINES(arr,"○,一,二,三,四,五,六,七,八,九",",")
?fun("1984")
?fun("1990")

FUNCTION fun(ds)
    ret = ""
    FOR i=1 TO LEN(ds)
        ch = SUBSTR(ds,i,1)
        IF BETWEEN(ch,"0","9")
            ret = ret + arr[VAL(ch)+1]
        ELSE
            RETURN ""
        ENDIF
    ENDFOR
    RETURN ret
ENDFUNC
#5
sdta2022-01-12 18:22
?Chrtranc(Transform(1980),"0123456789","〇一二三四五六七八九")+"年"
#6
kangss2022-01-13 15:58
学习了!谢谢!
#7
laowan0012022-01-14 08:08
5楼方法最简洁
#8
schtg2022-01-14 12:23
学习啦,谢谢!
#9
huasinstamps2022-01-20 22:13
学习了
#10
独木星空2022-01-21 07:45
回复 楼主 蝈蝈大叔
我在Excel做过阿拉伯数字转换成汉语大写金额(到元,角分不用)
#11
dbf永动机2022-09-05 11:14
repl all 年份列 with chrt(年份列,'0123456789','零一二三四五六七八九')

同理,如果一个字段里有中文和数字,或者英文,想把数字删掉,可以用:
repl all 某列 with chrt(某列,'0123456789','')   即可, 替换所有英文字母同理。


注意前者是一一对照关系,顺序可以变,但是前后的顺序要一致,后者把一些内容都替换成空,那么被替换的内容可以不按顺序。替换成空,两个''之间没有东西就是替换成空,加一个空格就是把他们替换成一个空格。
#12
sam_jiang2022-09-05 22:13
数字转大写金额的好像要难点,要判读金额大小。。。
#13
bdx8082022-09-06 08:07
谢谢!学习了
#14
aqyejun2022-09-06 08:15
程序代码:
FUNCTION   Dx1
    PARAMETERS nAmount
    PRIVATE ALL LIKE L_*
    L_S1='零壹贰叁肆伍陆柒捌玖'
    L_S2='亿仟佰拾万仟佰拾亿仟佰拾万仟佰拾元角分'
    nAmount=LTRIM(STR(nAmount*100,LEN(L_S2)/2))
    L_LEN=LEN(nAmount)
    L_SS2=RIGH(L_S2,2*L_LEN)
    L_DX=''
    L_0JS=0  &&连续零的个数
    L_N=0
    DO WHILE L_N<L_LEN
        L_N=L_N+1
        L_SZ=SUBSTR(nAmount,L_N,1)
        L_SZ=SUBSTR(L_S1,2*VAL(L_SZ)+1,2)
        L_DW=SUBSTR(L_SS2,2*L_N-1,2)
        IF L_SZ=''
            L_SZ=''
            DO CASE
                CASE L_DW$'亿元'
                CASE L_DW=''
                    IF RIGH(L_DX,2)='亿'
                        L_DW=''
                    ENDIF
                OTHERWISE
                    L_DW=''
            ENDCASE
            L_0JS=L_0JS+1
        ELSE
            IF L_0JS>0.AND.!(RIGH(L_DX,2)+L_DW)$L_SS2
                L_SZ=''+L_SZ
            ENDIF
            L_0JS=0
        ENDIF
        L_DX=L_DX+L_SZ+L_DW
    ENDDO
    L_DX=L_DX+IIF(RIGH(nAmount,1)='0','','')
    RETURN  L_DX
#15
aqyejun2022-09-06 08:17
SET PROCEDURE TO Dx1.PRG
dx1(金额)
#16
laowan0012022-09-06 08:21
#17
laowan0012022-09-06 08:23
以下是引用sam_jiang在2022-9-5 22:13:52的发言:

数字转大写金额的好像要难点,要判读金额大小。。。

木瓜大师的myfll有现成的函数,NToC(nNum)
#18
aqyejun2022-09-06 08:27
程序代码:
FUNCTION   Dx2
    PARAMETERS nAmount,IsDW
    nDZS=STRTRAN(ALLTRIM(STR(nAmount,18,2)),".","")   &&把小数点去掉
    cHZDX="零壹贰叁肆伍陆柒捌玖"
    cDW="分角元拾佰仟万拾佰仟亿拾佰仟万拾佰仟亿"
    cRMBDX=""
    nCd=LEN(nDZS)
    FOR IsDW=1 TO LEN(nDZS)
        cNumbers=SUBSTRC(cHZDX,INT(VAL(SUBSTR(nDZS,IsDW,1))+1),1)  && 数字转换
        IF IsDW=1     &&如果要单位
            cDWs=SUBSTRC(cDW,nCd,1)
        ELSE
            cDWs=SPACE(2)
        ENDIF
        cRMBDX=cRMBDX+cNumbers+cDWs
        nCd=nCd-1
    ENDFOR
    RETURN  cRMBDX


这个函数结果只显示数字,不显示单位,可以套打票据。
1