0
declare @v nvarchar(50) = '21.89777777777777777777777777'
select convert(decimal(18,8),round(@v,3))

四舍五入后无法截断十进制值。例如,在上述问题中,它返回 21.8980000。

The resulting output must be like 
21.898 when rounded by select convert(decimal(18,8),round(@v,3))
and 21.8988 when rounded by  round(@v,4)

我创建了一个存储过程,从中获取舍入值。并且它必须在四舍五入后修剪前导零。它必须是动态的,而不是每次都改变精度

4

3 回答 3

1

使用不同的精度decimal

declare @v nvarchar(50) = '21.89777777777777777777777777'
select convert(decimal(18,3),round(@v,3))

SQLFiddle 演示

于 2013-11-15T10:22:14.440 回答
0

浮动会做你的工作

declare @v nvarchar(50) = '21.89777777777777777777777777'
select convert(float,round(@v,3))
于 2013-11-15T10:28:38.610 回答
0

该值是相同的,无论它是21.8980000还是21.898。这是不同的格式

您应该在客户端上格式化值,而不是在 SQL Server 上。

于 2013-11-15T10:23:28.940 回答