VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

阿拉伯數字轉成英文大寫金額

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
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 Confused 真是讓人想不通呀 Sad
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作