SQL Round函数不工作,有什么想法吗?

SQL Round函数不工作,有什么想法吗?,sql,sql-server,rounding,Sql,Sql Server,Rounding,以下是SELECT语句: SELECT ROUND(ISNULL(SUM(Price),0),2) As TotalPrice FROM Inventory WHERE (DateAdded BETWEEN @StartDate AND @EndDate) 你知道为什么它不能四舍五入到小数点后两位吗?你可以尝试将(ISNULL(SUM(Price),0)转换为十进制(4,2))价格是什么数据类型 底层数据类型保持不变:只需舍入,但留下尾随的零 对于2位小数的输出,您需要转换为十进制(x,2)

以下是SELECT语句:

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

你知道为什么它不能四舍五入到小数点后两位吗?

你可以尝试将(
ISNULL(SUM(Price),0)转换为十进制(4,2))
价格是什么数据类型

底层数据类型保持不变:只需舍入,但留下尾随的零


对于2位小数的输出,您需要转换为十进制(x,2)

您的环境中可能存在列编组问题。可以尝试显式强制转换(圆形(…)为数字(18,4)),甚至可以尝试将其设置为0.0。还要确保在应用程序中使用正确的数据类型绑定列

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


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

ISNULL如果在WHERE子句中使用,可以生成更好的执行计划。它对结果集的性能并没有明显的影响。所以酷的人是不一致的?WHERE子句中为空,SELECT子句中为COALECSE…如上所述,COALESCE是可移植的。。。ISNULL->ISNOT:p如果不使用ROUND函数,结果是什么?
SELECT ROUND(123.4545, 2); -- = 123.4500
GO
SELECT ROUND(123.45, -2);  -- = 100,00
GO