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

如何轉換貨幣或資料型資料到英語

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
Ruey



註冊時間: 2003-03-12
文章: 1698
來自: tunglo

第 1 樓

發表發表於: 星期三 八月 13, 2003 10:59 am    文章主題: 如何轉換貨幣或資料型資料到英語 引言回覆

如何轉換貨幣或資料型資料到英語
( 作者: 不詳 )

文號: Q259663

最後更新日期:August 1, 2000

本文資訊適用於:
Microsoft Visual FoxPro for Windows, versions 3.0, 3.0b, 5.0, 5.0a, 6.0
Microsoft Visual FoxPro for Macintosh, version 3.0b

概述
本文顯示了一個示例, 以一個名爲 ConvertCurrencyToEnglish() 的用戶定義函數來轉換一個數值型的值爲英語表示法. 例如, 函數爲數值 1234.56 返回以下值:

One Thousand Two Hundred Thirty Four Dollars And Fifty Six Cents

更多資訊
微軟提供的編程示例僅用於例證, 沒有明確的和暗示的擔保, 包括但不僅限於暗示的可銷性擔保或適合於特定用途. 本文假定你熟悉示例所使用的編程語言, 創建它的工具和調試程式. 微軟支援專家可以幫助說明一個特定過程的功能, 但他們將不會修改這些示例, 不提供更多的功能構造滿足你的特定要求的. 如果你的編程經驗有限, 你可以聯繫微軟授權方案提供商或微軟收費諮詢電話 (800) 936-5200. 關於更多的微軟授權方案提供商, 請參見以下站點:

http://mcspreferral.microsoft.com/

關於微軟的可用的支援選項的更多資訊, 參見以下站點:

http://support.microsoft.com/directory/overview.asp

要創建 ConvertCurrencyToEnglish() 函數, 按以下步驟:

創建一個新程式並保存它爲 ConvertCurrencyToEnglish:

複製並粘貼以下代碼到新程式中:

*FUNCTION ConvertCurrencyToEnglish
LPARAMETERS tNumToConvert

LOCAL Temp
LOCAL NumToConvert
LOCAL cDollars, cCents
LOCAL nDecimalPlace, nCount
LOCAL ARRAY aPlace[9]

DO CASE
CASE EMPTY(tNumToConvert)
NumToConvert = "0"
CASE TYPE("tNumToConvert") = "N" && 轉換爲絕對的字串
*!* 檢查數值是否對於 VFP 來說太大. 如果是, 退出
IF tNumToConvert > 9999999999999.99
RETURN "**,***,***,***,***.**"
ENDIF
* 轉換 tnNumToConvert 爲一個正的串, 去掉額外的空格.
NumToConvert = ALLTRIM(STR(ABS(tNumToConvert), 16, 2))
OTHERWISE && 參數是字串, 確信它不是負的.
* 轉換數值到一個正數.
NumToConvert = IIF(LEFT(ALLTRIM(tNumToConvert), 1) = "-", SUBSTR(ALLTRIM(tNumToConvert), 2), ALLTRIM(tNumToConvert))
ENDCASE

* 找到小數位置
nDecimalPlace = AT(".", NumToConvert)

STORE "" TO cDollars, cCents, Result

aPlace = ""
aPlace[2] = " Thousand "
aPlace[3] = " Million "
aPlace[4] = " Billion "
aPlace[5] = " Trillion "
aPlace[6] = " Quadrillion "
aPlace[7] = " Quintillion "
aPlace[8] = " Sextillion "
aPlace[9] = " Septillion "


* 如果找到了小數位...
IF nDecimalPlace > 0
* 轉換分
Temp = LEFT(SUBSTR(NumToConvert, nDecimalPlace + 1) + "00", 2)
cCents = ConvertTens(Temp)

* 從要轉換的剩餘部分去掉分.
NumToConvert = ALLTRIM(LEFT(NumToConvert, nDecimalPlace - 1))
ENDIF

nCount = 1
DO WHILE NOT NumToConvert == ""
* 轉換 NumToConvert 的最後三位爲英文.
Temp = ConvertHundreds(RIGHT(NumToConvert, 3))
IF NOT Temp == ""
cDollars = Temp + aPlace[nCount] + cDollars
ENDIF
IF LEN(NumToConvert) > 3 Then
* 從 NumToConvert 移去已轉換的三位.
NumToConvert = LEFT(NumToConvert, LEN(NumToConvert) - 3)
ELSE
NumToConvert = ""
ENDIF
nCount = nCount + 1
ENDDO

* 整理 dollars.
DO CASE
CASE cDollars == ""
cDollars = "No Dollars"
CASE cDollars == "One"
cDollars = "One Dollar"
OTHERWISE
cDollars = cDollars + " Dollars"
ENDCASE

* 整理 cents.
DO CASE
CASE cCents == ""
cCents = " And No Cents"
CASE cCents == "One"
cCents = " And One Cent"
OTHERWISE
cCents = " And " + cCents + " Cents"
ENDCASE

ConvertCurrencyToEnglish = cDollars + cCents
RETURN ConvertCurrencyToEnglish
ENDFUNC

FUNCTION ConvertHundreds
LPARAMETERS NumToConvert
LOCAL Result
Result = ""

* 如果沒有要轉換的則退出.
IF VAL(NumToConvert) = 0
RETURN Result
ENDIF

* 添加一個前導的零到數值.
NumToConvert = RIGHT("000" + NumToConvert, 3)

* 是否有要轉換的百位?
IF LEFT(NumToConvert, 1) <> "0" Then
Result = ConvertDigit(LEFT(NumToConvert, 1)) + " Hundred "
ENDIF

* 是否有十位要轉換?
IF SUBSTR(NumToConvert, 2, 1) <> "0" Then
Result = Result + ConvertTens(SUBSTR(NumToConvert, 2))
ELSE
* 如果沒有, 則轉換個位.
Result = Result + ConvertDigit(SUBSTR(NumToConvert, 3))
ENDIF

ConvertHundreds = ALLTRIM(Result)
RETURN ConvertHundreds
ENDFUNC

FUNCTION ConvertTens
LPARAMETERS MyTens
LOCAL Result
Result = ""

* 值是在 10 到 19 之間嗎?
IF VAL(LEFT(MyTens, 1)) = 1
DO CASE
CASE VAL(MyTens) = 10
Result = "Ten"
CASE VAL(MyTens) = 11
Result = "Eleven"
CASE VAL(MyTens) = 12
Result = "Twelve"
CASE VAL(MyTens) = 13
Result = "Thirteen"
CASE VAL(MyTens) = 14
Result = "Fourteen"
CASE VAL(MyTens) = 15
Result = "Fifteen"
CASE VAL(MyTens) = 16
Result = "Sixteen"
CASE VAL(MyTens) = 17
Result = "Seventeen"
CASE VAL(MyTens) = 18
Result = "Eighteen"
CASE VAL(MyTens) = 19
Result = "Nineteen"
OTHERWISE
ENDCASE
ELSE
* .. 否則是 20 到 99 之間.
DO CASE
CASE VAL(LEFT(MyTens, 1)) = 2
Result = "Twenty "
CASE VAL(LEFT(MyTens, 1)) = 3
Result = "Thirty "
CASE VAL(LEFT(MyTens, 1)) = 4
Result = "Forty "
CASE VAL(LEFT(MyTens, 1)) = 5
Result = "Fifty "
CASE VAL(LEFT(MyTens, 1)) = 6
Result = "Sixty "
CASE VAL(LEFT(MyTens, 1)) = 7
Result = "Seventy "
CASE VAL(LEFT(MyTens, 1)) = 8
Result = "Eighty "
CASE VAL(LEFT(MyTens, 1)) = 9
Result = "Ninety "
OTHERWISE
ENDCASE

* 轉換個位.
Result = Result + ConvertDigit(RIGHT(MyTens, 1))
ENDIF
ConvertTens = Result
RETURN ConvertTens
ENDFUNC

FUNCTION ConvertDigit
LPARAMETERS MyDigit
DO CASE
CASE VAL(MyDigit) = 1
ConvertDigit = "One"
CASE VAL(MyDigit) = 2
ConvertDigit = "Two"
CASE VAL(MyDigit) = 3
ConvertDigit = "Three"
CASE VAL(MyDigit) = 4
ConvertDigit = "Four"
CASE VAL(MyDigit) = 5
ConvertDigit = "Five"
CASE VAL(MyDigit) = 6
ConvertDigit = "Six"
CASE VAL(MyDigit) = 7
ConvertDigit = "Seven"
CASE VAL(MyDigit) = 8
ConvertDigit = "Eight"
CASE VAL(MyDigit) = 9
ConvertDigit = "Nine"
OTHERWISE
ConvertDigit = ""
ENDCASE
RETURN ConvertDigit
ENDFUNC

保存該程式爲 convertcurrencytoenglish.prg


要測試該程式, 在命令視窗打入以下行, 然後回車:

? ConvertCurrencyToEnglish(1234.56)

注意: 由於産品限制, 該程式可容納的最大數是 9,999,999,999,999.99.

參考

Q210586 如何轉換貨幣或數值到英語

附加查詢關鍵字: writing report printing
關鍵字 : kbVFp300b kbVFp500 kbVFp500a kbVFp600 kbXBase kbGrpFox kbDSupport kbCodeSnippet
版本 : MACINTOSH:3.0b; WINDOWS:3.0,3.0b,5.0,5.0a,6.0
平臺 : MACINTOSH WINDOWS
問題類型 : kbhowto
技術 : kbvcSearch

_________________
#############################
快樂媽咪系列幸福宅配,喝十全雞湯~原來幸福那麼簡單!!

學會VFP使用者社區的搜尋,Code才會更有趣~
#############################
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

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


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