Sql server 2008 r2 在带有尾随零的case语句中设置小数点#

Sql server 2008 r2 在带有尾随零的case语句中设置小数点#,sql-server-2008-r2,decimal,case,Sql Server 2008 R2,Decimal,Case,在SQLServer2008中,我试图根据字段的值将结果截断到特定的小数位数。我遇到的麻烦是,如果最后一个小数位是零,那么它就不会显示它。我的代码如下: 当@field>=250时,则为四舍五入(@field,1,1) 当@field介于100和249.9999之间时,则为四舍五入(@field,2,1) 当@field=250,则为四舍五入(@field,1,1) 当@字段介于100和249.9999之间时 然后是圆(@field,2,1) 当@field

在SQLServer2008中,我试图根据字段的值将结果截断到特定的小数位数。我遇到的麻烦是,如果最后一个小数位是零,那么它就不会显示它。我的代码如下:

当@field>=250时,则为四舍五入(@field,1,1)
当@field介于100和249.9999之间时,则为四舍五入(@field,2,1)
当@field<100时,则圆形(@field,3,2)结束


250.36745
更改为
250.3
,效果非常好,但是
250.04567
返回
250
,我需要将其设置为
250.0
返回给您的结果取决于@field的原始数据类型。我假设您没有为@field选择精确的数据类型(例如:float),因此返回了一个变量结果。如果希望返回精确的结果,可以通过将case语句包装到cast中,如下所示:

cast(case when @field >= 250 then round(@field, 1, 1)
          when @field between 100 and 249.9999
          then round(@field, 2, 1)
          when @field < 100 then round(@field, 3, 2)
     end as decimal(19, 1))
cast(如果@field>=250,则为四舍五入(@field,1,1)
当@字段介于100和249.9999之间时
然后是圆(@field,2,1)
当@field<100时,则为圆形(@field,3,2)
以十进制结束(19,1))
如果您仍然觉得从服务器返回
250
而不是
250.0
,那么我会询问您用于执行查询和显示结果的前端工具。在SSMS中,您肯定会返回
250.0
。但是如果您使用的是不同的客户端,那么结果可能会有所不同