关于用len()函数统计float类型函数的长度问题
测试代码如下:
declare @a int
declare @b int
declare @c int
declare @d float
set @b=CONVERT(int,15*RAND()+2)
set @c=0
set @a=CONVERT(int,2*RAND())
set @d=convert(float,@a)/10
while @c<@b
begin
set @d=(@d+convert(float,@a))/10
select @a,@b,@d
select LEN(@d)
set @a=CONVERT(int,2*RAND())
set @c=@c+1
end
select @a,@b,@d
select LEN(@d)
运行结果如下:
(无列名) (无列名) (无列名) (无列名)
0 8 0 1
(无列名) (无列名) (无列名) (无列名)
1 8 0.1 3
(无列名) (无列名) (无列名) (无列名)
0 8 0.01 4
(无列名) (无列名) (无列名) (无列名)
0 8 0.001 5
(无列名) (无列名) (无列名) (无列名)
1 8 0.1001 6
(无列名) (无列名) (无列名) (无列名)
0 8 0.01001 7
(无列名) (无列名) (无列名) (无列名)
1 8 0.101001 8
(无列名) (无列名) (无列名) (无列名)
1 8 0.1101001 6
(无列名) (无列名) (无列名) (无列名)
1 8 0.1101001 6
看上面的结果,为什么会出现@d的小数位数增加,但是len(@d)的长度反而减少的情况呢?加粗和红字的部分,有无人能解释一下?