4

这是 SELECT 语句:

SELECT ROUND(ISNULL(SUM(Price),0),2) As TotalPrice
FROM Inventory
WHERE (DateAdded BETWEEN @StartDate AND @EndDate)

关于为什么不四舍五入到小数点后两位的任何想法?

4

3 回答 3

10

而不是ROUND(ISNULL(SUM(Price),0),2) 你可以尝试CAST(ISNULL(SUM(PRICE),0) AS DECIMAL (4,2))

于 2009-06-17T04:25:07.227 回答
2

价格是什么数据类型?

BOL 中的 ROUND

SELECT ROUND(123.4545, 2); -- = 123.4500
GO
SELECT ROUND(123.45, -2);  -- = 100,00
GO

底层数据类型保持不变:您只需四舍五入但留下尾随零。

对于 2 个小数位输出,您需要 CAST to decimal(x, 2)

于 2009-06-17T04:25:08.367 回答
2

您的环境中的列可能存在编组问题。可能会尝试显式强制转换 CAST(ROUND(...) AS NUMERIC(18,4)) 甚至只是尝试将 0 设为 0.0。还要确保在应用程序中将列与正确的数据类型绑定。

所有酷的人都使用 COALESCE 而不是 ISNULL。COALESCE 是可移植的,您可以拥有任意数量的参数(不仅仅是两个!!)

无论如何,我不确定这是否只是一个示例,但如果在此阶段尚未四舍五入,您的数据也可能存在 DA 问题。

于 2009-06-17T04:33:37.957 回答