  | 
				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 文章: 2160
 
  第 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     真是讓人想不通呀    | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
  	 
	    
  	   | 
 	
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
  | 
   
  
		 |