Sql server 2008 值为8.95的SQL舍入函数错误

Sql server 2008 值为8.95的SQL舍入函数错误,sql-server-2008,rounding,Sql Server 2008,Rounding,在SQL Server 2008中: declare @Value float declare @result float set @Value=7.95 select @result=round(@Value,1) print @result /*Prints 8*/ set @Value=8.95 select @result=round(@Value,1) print @result /*Prints 8.9*/ 对于8.95,得到的结果是8.9,但如果我将值设为7.95,则舍入函

在SQL Server 2008中:

declare @Value float
declare @result float 

set @Value=7.95
select @result=round(@Value,1)
print @result /*Prints 8*/

set @Value=8.95
select @result=round(@Value,1)
print @result /*Prints 8.9*/
对于8.95,得到的结果是8.9,但如果我将值设为7.95,则舍入函数的结果是8


为什么8.95的值是8.9而不是9?

对于8.975,它只给出9。你应该用这个来代替,
@result=round(@value,1,1)
浮点(实数和浮点)数据是近似值。十进制(数字)是精确的:
这可能就是这种看似不一致的行为的原因。

在我的机器上得到9(也是SQLServer8)是浮点值,如果我将其声明为十进制,我在我的机器上得到9。对于float,我得到的是8.9,请发布您正在运行的确切代码,该代码演示了这个问题,并在您的机器上测试它是否首先复制了该行为。您问题中的代码不可运行,因此这显然不是确切的代码
@result=round(@Value,1)
如果没有
set
select
@AnoopMohan,则无效-您发布的代码仍然无法运行,因此您显然没有费心检查您发布的示例是否在您自己的机器上演示了该问题。@AnoopMohan-我得到的结果与您相同。正如@Ivan所说,浮点是不精确的。设置值后,尝试添加
选择CAST(@Value为十进制(38,37))
。对于me
选择CAST(CAST(8.95作为浮点)作为十进制(38,37))
给出
8.9499999999993000000000000000000000
。这小于
8.95
,因此四舍五入。并且
选择CAST(CAST(7.95作为浮点)作为十进制(38,37))
给出大于
7.95
7.9500000001000000000000000000000
,因此四舍五入。