如何修剪舍入值的十进制后的所有零值

时间:2013-11-15 10:20:52

标签: sql-server sql-server-2008

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)

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

3 个答案:

答案 0 :(得分:1)

decimal

使用不同的精度
declare @v nvarchar(50) = '21.89777777777777777777777777'
select convert(decimal(18,3),round(@v,3))

SQLFiddle demo

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

Float将完成你的工作

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