SQL Server 2005:如果我使用float变量,Round返回不正确的值

spa*_*rks 5 sql sql-server rounding

在SQL Server 2005中,当我尝试舍入存储在float变量中的值时,我得到的值不正确.在下面的示例中,我希望对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
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

sge*_*des 6

我不建议将float数据类型用于确切的decimal值.

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

SET @bar = ROUND(CAST(@foo as DECIMAL(10,2)), 1) --> 5.6
Run Code Online (Sandbox Code Playgroud)

每个计算机科学家应该知道的浮点运算