如果使用float类型,SQL Server将返回不同的值

时间:2017-02-03 03:16:22

标签: c# sql-server

在SQL Server 2012中,我有一个例子:

DECLARE @baz float;
SET @baz = 7.19973;
select ROUND(@baz, 5, 1) --> 7.19972
select ROUND(7.19973, 5, 1) --> 7.19973

请帮我解释为什么上面的查询返回到7.19972? 。和 如何在c#上构建类似ROUND函数的函数?

1 个答案:

答案 0 :(得分:1)

问题是第三个论点。虽然该函数被称为round(),但它实际上在第三个参数不是0时截断该值。(参见here。)

发生了什么事?带小数点的常量是SQL Server中的十进制值。浮点数的赋值是近似值。在这种情况下,值必须类似于:7.19972999997。这将作为round()传递给float,第三个参数会将值截断为7.19972

致电时:

select ROUND(7.19973, 5, 1)

该值以decimal传递。没有转换为float所以十进制值是精确的,截断返回原始值。