Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.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
除法时SQL舍入我的整数结果_Sql_Sql Server_Sql Server 2008_Tsql - Fatal编程技术网

除法时SQL舍入我的整数结果

除法时SQL舍入我的整数结果,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我想问一个关于之前一篇文章的后续问题。(). 我现在面临的问题是将@SUMX2Y和@SUMX2X2的结果转换为FLOAT。我尝试了多种不同的方法,但仍然存在问题。有人知道我做错了什么吗?我没有包括我的转换尝试,但他们包括演员和转换尽可能的个人水平的等式 CREATE TABLE #Set1 ( X BIGINT, Y BIGINT ) INSERT INTO #Set1 VALUES (220, 630) ,(350, 940) ,(450, 1140)

我想问一个关于之前一篇文章的后续问题。(). 我现在面临的问题是将@SUMX2Y和@SUMX2X2的结果转换为FLOAT。我尝试了多种不同的方法,但仍然存在问题。有人知道我做错了什么吗?我没有包括我的转换尝试,但他们包括演员和转换尽可能的个人水平的等式

CREATE TABLE #Set1
(
    X BIGINT,
    Y BIGINT
)
INSERT INTO #Set1 
VALUES (220, 630)
      ,(350, 940)
      ,(450, 1140)


DECLARE @SUMX BIGINT
DECLARE @SUMY BIGINT
DECLARE @SUMX2 BIGINT
DECLARE @SUMY2 BIGINT
DECLARE @SUMX3 BIGINT
DECLARE @SUMX4 BIGINT
DECLARE @SUMXX BIGINT
DECLARE @SUMXY_ BIGINT
DECLARE @SUMXY BIGINT
DECLARE @SUMXX2 BIGINT
DECLARE @SUMX2Y BIGINT
DECLARE @SUMX2Y_ BIGINT
DECLARE @SUMX2X2 BIGINT
DECLARE @N INT

    SET @N = (SELECT COUNT(*) FROM #Set1)
    SET @SUMY = (SELECT SUM(Y) FROM #Set1)
    SET @SUMX2 = (SELECT SUM(POWER(X,2)) FROM #Set1)
    SET @SUMX4 = (SELECT SUM(POWER(X,4)) FROM #Set1)

    SET @SUMX2Y_ = (SELECT SUM(POWER(X,2)*Y) FROM #Set1)

    SET @SUMX2Y = @SUMX2Y_ - (@SUMX2*@SUMY)/(@N)
    SET @SUMX2X2 = @SUMX4 - (POWER(@SUMX2,2)/@N)

    PRINT @SUMX2Y
    PRINT @SUMX2X2

我现在只是把BIGINT改成FLOAT。我不确定这是否会引起问题。我们将看到使用数字(18,2)或任何您想要保持的精度。使用float将保持十进制精度值,直到显式传递十进制值

下面是您可以使用的代码

CREATE TABLE #Set1
(
    X NUMERIC(18,2),
    Y NUMERIC(18,2)
)
INSERT INTO #Set1 
VALUES (220, 630)
      ,(350, 940)
      ,(450, 1140)


DECLARE @SUMX NUMERIC(18,2)
DECLARE @SUMY NUMERIC(18,2)
DECLARE @SUMX2 NUMERIC(18,2)
DECLARE @SUMY2 NUMERIC(18,2)
DECLARE @SUMX3 NUMERIC(18,2)
DECLARE @SUMX4 NUMERIC(18,2)
DECLARE @SUMXX NUMERIC(18,2)
DECLARE @SUMXY_ NUMERIC(18,2)
DECLARE @SUMXY NUMERIC(18,2)
DECLARE @SUMXX2 NUMERIC(18,2)
DECLARE @SUMX2Y NUMERIC(18,2)
DECLARE @SUMX2Y_ NUMERIC(18,2)
DECLARE @SUMX2X2 NUMERIC(18,2)
DECLARE @N NUMERIC(18,2)

    SET @N = (SELECT COUNT(*) FROM #Set1)
    SET @SUMY = (SELECT SUM(Y) FROM #Set1)
    SET @SUMX2 = (SELECT SUM(POWER(X,2)) FROM #Set1)
    SET @SUMX4 = (SELECT SUM(POWER(X,4)) FROM #Set1)

    SET @SUMX2Y_ = (SELECT SUM(POWER(X,2)*Y) FROM #Set1)

    SET @SUMX2Y = @SUMX2Y_ - (@SUMX2*@SUMY)/(@N)
    SET @SUMX2X2 = @SUMX4 - (POWER(@SUMX2,2)/@N)

    PRINT @SUMX2Y
    PRINT @SUMX2X2
将下面的脚本用于浮点和数字差异

DECLARE @SUMX NUMERIC(18,2) = 100 

DECLARE @SUMX1 FLOAT = 100 

SELECT @SUMX,@SUMX1