T-SQL在使用浮点变量的同一查询上的不同结果
为什么我从这两个查询中得到不同的结果 第一个问题:T-SQL在使用浮点变量的同一查询上的不同结果,sql,tsql,floating-point,Sql,Tsql,Floating Point,为什么我从这两个查询中得到不同的结果 第一个问题: DECLARE @b FLOAT; SET @b = 100 SELECT @b / 3 + @b / 3 + @b / 3 第二个问题: DECLARE @flt FLOAT; SET @flt = 100 / 3 SELECT @flt + @flt + @flt 我读了很多关于SQL中浮点类型的书,但并没有了解这两个查询的区别 (第一个结果是100,第二个结果是99)看起来先进行了计算,然后根据最高类型
DECLARE @b FLOAT;
SET @b = 100
SELECT @b / 3 + @b / 3 + @b / 3
第二个问题:
DECLARE @flt FLOAT;
SET @flt = 100 / 3
SELECT @flt + @flt + @flt
我读了很多关于SQL中浮点类型的书,但并没有了解这两个查询的区别
(第一个结果是100,第二个结果是99)看起来先进行了计算,然后根据最高类型进行四舍五入。 即 在第一种情况下: 首先,我们进行了计算,即
@b/3(33.33333)+@b/3(33.33333)+@b/3(33.33333)
现在我们把它四舍五入,得到了100
在第二种情况下:
首先我们进行了计算,即100/3((33.33333))
四舍五入到最高类型,即四舍五入到33
现在我们有了进一步的计算
@flt+@flt+@flt(33+33+33)
所以我们有99
SQL Server做整数除法,所以100/3=33。正如@GordonLinoff所说的,但它被设置为floatyes,但除法是100(一个整数)除以4(另一个整数)。SQL Server然后假设它正在执行整数除法,并将其结果分配给一个浮点数(但它已将其作为整数除法执行)@StefanRendevski你是什么意思?第一个将值100分配给一个浮点数,然后在除法中使用该浮点数……因此根本没有整数除法,正如@Lemak在评论中所说的那样,整数除法首先发生,这就是为什么