在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函数的函数?
答案 0 :(得分:1)
问题是第三个论点。虽然该函数被称为round()
,但它实际上在第三个参数不是0时截断该值。(参见here。)
发生了什么事?带小数点的常量是SQL Server中的十进制值。浮点数的赋值是近似值。在这种情况下,值必须类似于:7.19972999997
。这将作为round()
传递给float
,第三个参数会将值截断为7.19972
。
致电时:
select ROUND(7.19973, 5, 1)
该值以decimal
传递。没有转换为float
所以十进制值是精确的,截断返回原始值。