  | 
				VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.   
				 | 
			 
		 
		 
	
		| 上一篇主題 :: 下一篇主題   | 
	 
	
	
		| 發表人 | 
		內容 | 
	 
	
		cmsa1123
 
 
  註冊時間: 2003-06-12 文章: 6
 
  第 1 樓
  | 
		
			
				 發表於: 星期五 八月 25, 2006 3:35 pm    文章主題: 數值 四捨五入怪怪的~~ | 
				     | 
			 
			
				
  | 
			 
			
				CREATE CURSOR TEST(AA N(20,6),BB N(20,6))&&小數位數6+6>8 
 
SELECT TEST 
 
APPEND BLANK 
 
REPLACE AA WITH 7.995600,BB WITH 4487.500000
 
?7.995600*4487.500000
 
?ROUND(7.995600*4487.500000,4)
 
?ROUND(7.995600*4487.500000,2)
 
SELECT TEST
 
?ROUND(AA*BB,4)
 
?ROUND(AA*BB,2)
 
 
執行看看八... | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		syntech
 
 
  註冊時間: 2003-05-16 文章: 4252 來自: Taipei,Taiwan
  第 2 樓
  | 
		 | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		garfield Site Admin
  
  註冊時間: 2003-01-30 文章: 2160
 
  第 3 樓
  | 
		
			
				 發表於: 星期五 八月 25, 2006 4:07 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				參考微軟的說明:
 
http://support.microsoft.com/default.aspx?scid=kb%3Bzh-cn%3B157954
 
 
解決方案
 
更準確的數值四捨五入必要時使用貨幣數據類型。 但是, 使用 Currency 數據類型不修復所有捨入問題。 
 
 
以下代碼示例提供解決通過 mpay 的數字內容轉換為字符串。 然後 VAL() 函數將字符串轉換為數字數據類型用於 ROUND() 函數中返回。    CLEAR
 
   mrate = 86.173125
 
   mhours = 24.0000
 
   mpay = mhours * mrate
 
   ? mpay
 
   test=STR(mpay,LEN(STR(mpay)),LEN(STR(mpay)))
 
   ? ROUND(mpay, 2)
 
   ? ROUND(VAL(test),2) _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		bin1x
 
 
  註冊時間: 2004-08-27 文章: 462
 
  第 4 樓
  | 
		
			
				 發表於: 星期一 八月 28, 2006 11:26 am    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				我是曾經發生過 4捨不5入的情況(6,7,8,9也一樣)
 
如果是field 變數的話(不是field 變數呢,不太清楚呢)
 
應考慮decimal 的設定吧,位數不對會int(),如果是小數
 
根本不理人 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
  	 
	    
  	   | 
 	
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
  | 
   
  
		 |