|
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
nipei
註冊時間: 2005-09-01 文章: 6
第 1 樓
|
發表於: 星期二 九月 26, 2006 4:00 pm 文章主題: 阿拉伯數字轉成英文大寫金額 |
|
|
請大大幫忙指點下? |
|
回頂端 |
|
|
a123eric
註冊時間: 2003-10-20 文章: 64
第 2 樓
|
發表於: 星期二 九月 26, 2006 4:56 pm 文章主題: |
|
|
? inttobig(123)
function inttobig(tnVal)
return STRCONV(alltrim(STR(tnVal)),1)
endfunc |
|
回頂端 |
|
|
garfield Site Admin
註冊時間: 2003-01-30 文章: 2157
第 3 樓
|
發表於: 星期二 九月 26, 2006 9:17 pm 文章主題: |
|
|
搜尋"英文大寫" _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. |
|
回頂端 |
|
|
a123eric
註冊時間: 2003-10-20 文章: 64
第 4 樓
|
發表於: 星期二 九月 26, 2006 11:11 pm 文章主題: |
|
|
哈…原來我想的方向錯了… |
|
回頂端 |
|
|
catjoke
註冊時間: 2003-06-16 文章: 175 來自: 香港
第 5 樓
|
發表於: 星期五 九月 29, 2006 9:33 am 文章主題: |
|
|
好吧, 給你一個 比 這裡2003年發表的程式, 還要簡潔!
分兩個 Proc, NTOE 和 N19TOE, 實際上 N19TOE 可處理 1-99 的英文.
善用 文字處理, 就不用寫這麼多 Array 了!
引言回覆: | * Numeric to English
* Handle: 9,999,999,999.99
PROCEDURE NTOE
LPARAMETERS pNumber, pDollar
LOCAL EngResult, NumDegree, TakenValue, DegreeTimes
NumDegree = " THOUSAND MILLION BILLON "
pNumber = ABS(pNumber)
TakenValue = (pNumber - INT(pNumber)) * 100 && Decimal Fraction
EngResult = ""
DegreeTimes = 0
* Zero Passing
IF pNumber = 0
RETURN "ZERO"
ENDIF
DO WHILE (TakenValue >= 1 .OR. pNumber > 0) .OR. DegreeTimes = 0
IF DegreeTimes > 1
sNo = AT(" ", NumDegree, DegreeTimes - 1)
eNo = AT(" ", NumDegree, DegreeTimes)
ENDIF
EngResult = IIF(DegreeTimes = 0 .AND. TakenValue # 0, " AND CENTS", "") + N19TOE(INT(TakenValue/100)) + ;
IIF(INT(TakenValue/100) # 0, " HUNDRED", "") + ;
IIF(INT(TakenValue/100) # 0 .AND. MOD(TakenValue, 100) < 10, " AND", "") + N19TOE(MOD(TakenValue, 100)) + ;
IIF(DegreeTimes > 1 .AND. MOD(TakenValue, 100) # 0, SUBSTR(NumDegree, sNo, eNo-sNo), "") + ;
EngResult
TakenValue = MOD(pNumber, 1000)
pNumber = INT(pNumber/1000)
DegreeTimes = DegreeTimes + 1
ENDDO
IF TYPE([pDollar]) = [C] && 2nd Dollar English Word
EngResult = [TOTAL ] + ALLTRIM(pDollar) + [ DOLLAR] + EngResult + [ ONLY.]
ELSE
EngResult = [TOTAL US DOLLAR] + EngResult + [ ONLY.]
ENDIF
RETURN ALLTRIM(EngResult)
ENDPROC
* NTOE
* Number 1-19 TO English
PROCEDURE N19TOE
LPARAMETERS pNumber
LOCAL NO19, NO20, sNo, eNo
NO19 = " ONE TWO THREE FOUR FIVE SIX SEVEN EIGHT NINE TEN ELEVEN TWELVE" + ;
" THIRTEEN FOURTEEN FIFTEEN SIXTEEN SEVENTEEN EIGHTEEN NINETEEN TWENTY "
NO20 = " TWENTY THIRTY FORTY FIFTY SIXTY SEVENTY EIGHTY NINETY "
EngResult = ""
IF pNumber # 0
IF pNumber <= 20
sNo = AT(" ", NO19, pNumber)
eNo = AT(" ", NO19, pNumber+1)
EngResult = SUBSTR(NO19, sNo, eNo-sNo)
ELSE
IF MOD(pNumber, 10) # 0
sNo = AT(" ", NO19, MOD(pNumber, 10))
eNo = AT(" ", NO19, MOD(pNumber, 10)+1)
EngResult = "-"+SUBSTR(NO19, sNo+1, eNo-sNo-1)
ENDIF
sNo = AT(" ", NO20, INT(pNumber/10)-1)
eNo = AT(" ", NO20, INT(pNumber/10))
EngResult = SUBSTR(NO20, sNo, eNo-sNo) + EngResult
ENDIF
ENDIF
RETURN EngResult
ENDPROC
* N19TOE
|
_________________ 喵喎~ 貓當然是 "茅" 的嘛! ^0^; |
|
回頂端 |
|
|
effielee
註冊時間: 2005-09-22 文章: 7
第 6 樓
|
發表於: 星期五 十一月 30, 2007 3:30 pm 文章主題: |
|
|
不知是否有人遇過和我相同情形,
使用上述的程式 傳入值為 NTOE(57465.70,'US'),
回傳的文字卻是 TOTAL US DOLLAR FIFTY-SEVEN THOUSAND FOUR HUNDRED SIXTY-FIVE AND CENTS SIXTY ONLY.
紅字的部份應是 SEVENTY 才對,
檢查後發現在PROC NTOE 在處理小數兩位的數值時有問題,N19TOE(MOD(TakenValue, 100)) MOD(TakenValue, 100) 的值是70
引言回覆: |
PROCEDURE N19TOE
LPARAMETERS pNumber
LOCAL NO19, NO20, sNo, eNo
NO19 = " ONE TWO THREE FOUR FIVE SIX SEVEN EIGHT NINE TEN ELEVEN TWELVE" + ;
" THIRTEEN FOURTEEN FIFTEEN SIXTEEN SEVENTEEN EIGHTEEN NINETEEN TWENTY "
NO20 = " TWENTY THIRTY FORTY FIFTY SIXTY SEVENTY EIGHTY NINETY "
EngResult = ""
IF pNumber # 0
IF pNumber <= 20
sNo = AT(" ", NO19, pNumber)
eNo = AT(" ", NO19, pNumber+1)
EngResult = SUBSTR(NO19, sNo, eNo-sNo)
ELSE
IF MOD(pNumber, 10) # 0
sNo = AT(" ", NO19, MOD(pNumber, 10))
eNo = AT(" ", NO19, MOD(pNumber, 10)+1)
EngResult = "-"+SUBSTR(NO19, sNo+1, eNo-sNo-1)
ENDIF
sNo = AT(" ", NO20, INT(pNumber/10)-1)
eNo = AT(" ", NO20, INT(pNumber/10))
EngResult = SUBSTR(NO20, sNo, eNo-sNo) + EngResult
ENDIF
ENDIF
RETURN EngResult
ENDPROC
|
但在PROC N19TOE 中紅色部份計算出來後卻是 6 @@?
但如果不是透過PROC NTOE 而是直接使用N19TOE(70) ,
回傳的字又是正確的 SEVENTY 真是讓人想不通呀 |
|
回頂端 |
|
|
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|