1

我的一個UDF的一部分有一個小節,試圖找到浮點數後的小數位數,並返回乘以10的冪乘以整數。使用1.0005作爲一個例子,這裏的段:SQL評估循環條件錯誤

DECLARE @num FLOAT = 1.0005 
DECLARE @exponent AS INT = 0 

WHILE @num - FLOOR(@num) > 0.000001 
BEGIN 
SET @exponent += 1 
SET @num *= 10 
END 

當我調試這個在2012年SSMS,對「而」行,如果我在其第四次迭代立即窗口評估? CASE WHEN @num - FLOOR(@num) > 0.000001 THEN 1 ELSE 0 END起,我得到0 - 然而,循環無限期地運行。

任何想法?

回答

0

我想這一點,看看到底是怎麼回事...... @z不會改變......

DECLARE @num FLOAT = 1.0005 
DECLARE @exponent AS INT = 0 
declare @x float 
declare @z float 

WHILE @num - FLOOR(@num) > 0.000001 
BEGIN 
SET @exponent += 1 
SET @num *= 10 
set @x = FLOOR(@num) 
set @z = @num - FLOOR(@num) 
END 
+0

事實上它不 - 謝謝你,幫我蘇斯什麼,我相信是問題。 @z保持略低於1,表明@num在每次迭代中只是小於一個整數 - 將其降低到錯誤的浮點精度(出於某種原因總是不準確的破壞我的代碼的方向!),WHILE @num = FLOOR(ROUND(@ num,10))'代替現有的while子句修復問題。 – user2163043

+1

* WHILE @num <> FLOOR(ROUND(@ num,10))'even! – user2163043

+0

酷!不知道你在找什麼,所以沒有提出任何建議,但認爲調試會有幫助... – BWS