加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

SQL Server舍入错误,给出不同的值

发布时间:2021-03-02 20:30:06 所属栏目:编程 来源:网络整理
导读:我有一个存储进程,它执行大量计较,将功效存储在几个姑且表中. 最后计较总和并舍入到两位小数并存储在姑且表中并选择它. 对付所存眷的列,全部中间和最终姑且表都具稀有据范例float. 原始场景: Declare @Intermediate table{ --several other columnsLabor flo

我有一个存储进程,它执行大量计较,将功效存储在几个姑且表中.
最后计较总和并舍入到两位小数并存储在姑且表中并选择它.

对付所存眷的列,全部中间和最终姑且表都具稀有据范例float.

原始场景:

Declare @Intermediate table
{
 --several other columns

Labor float

--several other columns
};

---Lots of calculation ---xx-----

Declare @Final table
{
 --several other columns

LaborTotal float

--several other columns
};

INSERT INTO @Final  SELECT ROUND(ISNULL((SELECT SUM([Labor]) FROM @Intermediate ),0),2)  AS LaborTotal;

SELECT * FROM @Final;

Result: 7585.22  --> when rounded  //Here is the error Expecting 7585.23
        7585.225 --> when not rounded

测试用例 :

DECLARE @test float = 7585.225;
   SELECT ROUND(@test,2) AS Result; --> results 7585.23

   SELECT ROUND(7585.225,2) AS Result --> results 7585.23

将单个值插入姑且表,然后计较总和

DECLARE @TmpTable table
(
 MaterialAmount float,LaborAmount float
);

INSERT INTO @TmpTable VALUES (12.10,1218.75);
INSERT INTO @TmpTable VALUES (12.10,1090.125);
INSERT INTO @TmpTable VALUES (12.10,900);
INSERT INTO @TmpTable VALUES (12.10,1632.6);
INSERT INTO @TmpTable VALUES (12.10,1625);
INSERT INTO @TmpTable VALUES (12.10,1118.75);


SELECT ROUND(ISNULL((SELECT SUM(MaterialAmount) FROM @TmpTable),2) AS MatSum,ISNULL((SELECT SUM(LaborAmount) FROM @TmpTable),0) AS LabSumUnrounded,--> 7585.225
       ROUND(ISNULL((SELECT SUM(LaborAmount) FROM @TmpTable),2) AS LabSum;  --> 7585.23

SELECT ROUND(SUM(MaterialAmount),2),ROUND(SUM(LaborAmount),2)   ---> 7585.23
   FROM @TmpTable;

任何设法/提议为什么我在我的原始场景中得到0.01差别,同时在我的全部测试用例中得到精确的值?
提前叩谢.

办理要领

这是由于您行使的是float数据库范例.

Float不该该用于暗示必要精度的值,由于它们存储为近似值,差异的操纵可以给出差异的功效.

在SQL Server中,您可以行使十进制和数字数据范例举办数值精度:
http://msdn.microsoft.com/en-us/library/ms187746.aspx

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读