5

在 SQL Server 2005 中,当我尝试对存储在浮点变量中的值进行舍入时,我得到的值不正确。在下面的示例中,我希望对 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

我究竟做错了什么?

4

1 回答 1

6

我不建议将float数据类型用于精确decimal值。

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

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

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

于 2013-07-16T00:33:02.153 回答