SQL评估循环条件错误

时间:2014-02-28 17:06:19

标签: sql sql-server-2008-r2 while-loop floating-point-precision

我的一个UDF的一部分有一个试图找到浮点数后的小数位数的部分,并返回乘以10的幂的数字,使得它是一个整数。以1.0005为例,这里是段:

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

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

当我在SSMS 2012中进行调试时,如果我在第四次迭代之后在立即窗口中评估? CASE WHEN @num - FLOOR(@num) > 0.000001 THEN 1 ELSE 0 END,那么在'while'行,我得到0 - 但是,循环会无限期地运行。

有什么想法吗?

1 个答案:

答案 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