 |
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
七音
註冊時間: 2006-05-03 文章: 13
第 1 樓
|
發表於: 星期三 五月 03, 2006 9:09 am 文章主題: 求救!怎么把一个文本框中的数字金额(两位小数)转换成大写中文??? |
|
|
五一劳动节还在劳动的我,编程到后来脑细胞实在不够用了,希望有前辈帮帮忙,不胜感激!  |
|
回頂端 |
|
 |
garfield Site Admin

註冊時間: 2003-01-30 文章: 2160
第 2 樓
|
|
回頂端 |
|
 |
七音
註冊時間: 2006-05-03 文章: 13
第 3 樓
|
發表於: 星期三 五月 03, 2006 9:25 am 文章主題: |
|
|
十分感激!我马上去调试调试。 |
|
回頂端 |
|
 |
七音
註冊時間: 2006-05-03 文章: 13
第 4 樓
|
發表於: 星期三 五月 03, 2006 11:23 am 文章主題: |
|
|
都不行啊,那里有三个源代码和一个下载的,下载的那个打开来是乱码,三段源代码中两段有语法错误,剩下的一段居然还需要调用gcPos2Chinese这个函数,可这函数在哪? |
|
回頂端 |
|
 |
七音
註冊時間: 2006-05-03 文章: 13
第 5 樓
|
發表於: 星期三 五月 03, 2006 11:38 am 文章主題: 我这么作的 |
|
|
为了测这个功能,我新建了一个项目,把以下代码存为F_StrConv.prg
FUNCTION F_StrConv
LPARAMETERS L_ncNumber
LOCAL W1_cNumber,W1_cStr1,W1_cStr2,W1_cStr3
LOCAL W1_nSUB_A,W1_n1Num,W1_cTranStr
IF TYPE("L_ncNumber") = "C"
L_ncNumber = VAL(CHRTRAN(L_ncNumber,",",""))
ENDIF
W1_cNumber = LTRIM(TRANSFORM(ABS(L_ncNumber),"9999999999999999999.99"))
STORE "零壹貳參肆伍陸柒捌玖" TO W1_cStr1
STORE "分角 元拾佰仟萬拾佰仟億拾佰仟兆拾佰仟" TO W1_cStr2
STORE " 元 萬 億 兆 " TO W1_cStr3
STORE SPACE(0) TO Lo_cNumber
FOR W1_nSUB_A = LEN(W1_cNumber) TO 1 STEP -1
W1_n1Num = VAL(SUBSTR(W1_cNumber,W1_nSUB_A,1)) && 要處理的位數之值
W1_cTranStr = IIF(W1_n1Num=0,W1_cStr3,W1_cStr2) && 要換算的對應單位字串
Lo_cNumber=SUBSTR(W1_cStr1,W1_n1Num*2+1,2)+ ALLTRIM(SUBSTR(W1_cTranStr,(LEN(W1_cNumber)-W1_nSUB_A+1)*2-1,2)) + Lo_cNumber
ENDFOR
Lo_cNumber = Lo_cNumber + "整"
DO WHILE !EMPTY(AT("零零",Lo_cNumber))
Lo_cNumber = STRTRAN(Lo_cNumber,"零零","零")
ENDDO
Lo_cNumber = STRTRAN(Lo_cNumber,"零萬","萬")
Lo_cNumber = STRTRAN(Lo_cNumber,"零億","億")
Lo_cNumber = STRTRAN(Lo_cNumber,"零兆","兆")
Lo_cNumber = STRTRAN(Lo_cNumber,"零元","元")
Lo_cNumber = STRTRAN(Lo_cNumber,"元零","元")
Lo_cNumber = STRTRAN(Lo_cNumber,"零整","整")
RETURN Lo_cNumber
在form中我只建一个页面,页面中就两个文本框和一个按钮,text1用来存放输入的数字,text2用来显示转换后的大写中文,按钮实现转换,在按钮的click事件中我这么写:(num我在form1的load中定义了)
num=thisform.text1.value
set udfparms to reference
set procedure to F_StrConv.prg
thisform.text2.value=F_StrConv (num)
为什么测试的时候老是说找不到F_StrConv.prg呢?为了保险起见,我连安装目录以及程序目录都保存了F_StrConv.prg,我是菜鸟,请别笑,指点一下好不? |
|
回頂端 |
|
 |
garfield Site Admin

註冊時間: 2003-01-30 文章: 2160
第 6 樓
|
發表於: 星期三 五月 03, 2006 12:31 pm 文章主題: |
|
|
如果你要將 function f_strconv 存在一個prg 中,
請不要將prg的檔名也叫做 f_strconv
另一個方法是: 不要有 function f_strconv 這行命令.
這個程式中有兩行程式有問題.
W1_n1Num = VAL(SUBSTR(W1_cNumber,W1_nSUB_A,1)) && 要處理的位數之值
W1_cTranStr = IIF(W1_n1Num=0,W1_cStr3,W1_cStr2) && 要換算的對應單位字串
是因為在 &&之前的那些空白看起來是空白,
但實際上不是空白,
將這些假空白刪掉即可. _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. |
|
回頂端 |
|
 |
七音
註冊時間: 2006-05-03 文章: 13
第 7 樓
|
發表於: 星期三 五月 03, 2006 3:01 pm 文章主題: 十分感谢,一点补充 |
|
|
十分感谢,现在我已经完成了这个模块,我把函数变量定义部分写在form的load中,然后其他部分直接写在按钮的click事件中,就成了。并且由于借鉴的源代码中有些不足导致出来的大写金额不完美:大写金额中会出现空档或连续的“零”,我作了些修整。修整的代码除了简体与繁体中文的一些更换外,主要体现在代码段后部的ENDDO 和RETURN Lo_cNumber之间:
ENDDO
Lo_cNumber = STRTRAN(Lo_cNumber,"零万","万")
Lo_cNumber = STRTRAN(Lo_cNumber,"零亿","亿")
Lo_cNumber = STRTRAN(Lo_cNumber,"零兆","兆")
Lo_cNumber = STRTRAN(Lo_cNumber,"圆零","圆")
Lo_cNumber = STRTRAN(Lo_cNumber,"零整","整")
Lo_cNumber = STRTRAN(Lo_cNumber,"零零","零")
Lo_cNumber = STRTRAN(Lo_cNumber," 零 零 整","整")
Lo_cNumber = STRTRAN(Lo_cNumber,"零 整","整")
Lo_cNumber = STRTRAN(Lo_cNumber,"零 万","万")
Lo_cNumber = STRTRAN(Lo_cNumber,"零 零 万","万")
Lo_cNumber = STRTRAN(Lo_cNumber,"零 零 零 ","零")
Lo_cNumber = STRTRAN(Lo_cNumber,"圆 ","圆")
Lo_cNumber = STRTRAN(Lo_cNumber," 零 零","整")
Lo_cNumber = STRTRAN(Lo_cNumber," 零 零 整","整")
Lo_cNumber = STRTRAN(Lo_cNumber,"零 ","零")
Lo_cNumber = STRTRAN(Lo_cNumber,"零零圆","圆")
Lo_cNumber = STRTRAN(Lo_cNumber,"圆零整","圆整")
Lo_cNumber = STRTRAN(Lo_cNumber,"零圆整","圆整")
RETURN Lo_cNumber
希望能对有需要的人有所帮助。
感谢源代码的作者,以及感谢garfield的指点。 |
|
回頂端 |
|
 |
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|