SQLServer2005:如果使用浮点变量,Round将返回不正确的值



在SQLServer2005中,当我尝试舍入存储在浮点变量中的值时,会得到不正确的值。在下面的例子中,我预计对ROUND函数的两个调用都应该返回5.6:

DECLARE @foo float;
DECLARE @bar float;
DECLARE @baz float;
SET @foo = 5.55;
SET @bar = ROUND(@foo, 1) --> 5.5
SET @baz = ROUND(5.55, 1) --> 5.6

我做错了什么?

对于确切的decimal值,我不建议使用float数据类型。

在这种特殊情况下,您可以将@foo变量转换为decimal:

SET @bar = ROUND(CAST(@foo as DECIMAL(10,2)), 1) --> 5.6

每一位计算机科学家应该知道的关于浮点运算的知识

最新更新