Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
T-SQL在使用浮点变量的同一查询上的不同结果_Sql_Tsql_Floating Point - Fatal编程技术网

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在评论中所说的那样,整数除法首先发生,这就是为什么