SQL Server强制转换和舍入

SQL Server强制转换和舍入,sql,sql-server,Sql,Sql Server,我在select子句中有: AVG (cast(scale as decimal(5,2))) 我不断得到一个数字,比如:0.6523412897,我所做的一切似乎都无法达到我想要的:0.65。 基本上我想要一个2的刻度(小数点后两位)。 谢谢试试看 ROUND(AVG(scale), 2) 试一试 投平均分,不要投平均分: cast(AVG(scale) as decimal(5,2)) 更新 使用将更改值而不是类型。例如,select round(0.12345,2)返回0.12000

我在select子句中有:

AVG (cast(scale as decimal(5,2)))
我不断得到一个数字,比如:0.6523412897,我所做的一切似乎都无法达到我想要的:0.65。 基本上我想要一个2的刻度(小数点后两位)。 谢谢

试试看

ROUND(AVG(scale), 2)
试一试


投平均分,不要投平均分:

cast(AVG(scale) as decimal(5,2))
更新


使用将更改值而不是类型。例如,
select round(0.12345,2)
返回0.12000,因为它应该将0.12345四舍五入到0.12,但在点后保留原始类型5位小数,因此为0.12000。要更改类型,必须使用cast,如我的帖子中所述。

使用平均值,而不是平均值:

cast(AVG(scale) as decimal(5,2))
更新


使用将更改值而不是类型。例如,
select round(0.12345,2)
返回0.12000,因为它应该将0.12345四舍五入到0.12,但在点后保留原始类型5位小数,因此为0.12000。要更改类型,必须使用cast,如我的文章中所述。

这取决于您使用的数据库,但SQL Server的答案是ROUND:


这取决于您使用的数据库,但SQL Server的答案是ROUND:


现在我有:舍入(平均值(小数比例)),2),我的结果是1.95000…..我如何去掉尾随零,所以我只得到1.95?现在我有:舍入(平均值(小数比例)),2,我的结果是1.95000…..我如何去掉尾随零,所以我只得到1.95?如果我改为:舍入(平均值(小数比例)),我将失去精度,对于我求平均值的数字是整数,所以结果是1.00,2.00,等等。算出,需要双精度转换…将AVG(cast(scale as decimal(5,2)))转换为decimal(5,2))转换为[AVG]如果我改为:cast(AVG(scale)as decimal(5,2)),我会失去精度,因为我求平均值的数字是整数,所以结果是1.00,2.00,等等,算出了,需要两次转换…转换(平均值(转换为十进制(5,2))转换为十进制(5,2))转换为[AVG]