  | 
				VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.   
				 | 
			 
		 
		 
	
		| 上一篇主題 :: 下一篇主題   | 
	 
	
	
		| 發表人 | 
		內容 | 
	 
	
		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才會更有趣~
 
############################# | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
  	 
	    
  	   | 
 	
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
  | 
   
  
		 |