Sql 使用特定小数点对数字进行上下舍入

Sql 使用特定小数点对数字进行上下舍入,sql,sql-server,rounding,floor,ceil,Sql,Sql Server,Rounding,Floor,Ceil,我使用的是SQL Server 2008 R2,我希望找到具有特定小数点的上下舍入值,如下所示: 例如: 如果我的值是1.27845,我希望答案有两位小数,那么我的答案应该是 四舍五入:1.28 四舍五入:1.27 如果我的值是33.33333,我希望答案有两位小数,那么我的答案应该是 四舍五入:33.34 四舍五入:33.33 如果我的值是1.27845,我希望答案有3位小数,那么我的答案应该是 四舍五入:1.279 四舍五入:1.278 如果我的值是33.33333,我希望答案有3位小

我使用的是SQL Server 2008 R2,我希望找到具有特定小数点的上下舍入值,如下所示:

例如:

  • 如果我的值是1.27845,我希望答案有两位小数,那么我的答案应该是

  • 四舍五入:1.28
  • 四舍五入:1.27
  • 如果我的值是33.33333,我希望答案有两位小数,那么我的答案应该是

  • 四舍五入:33.34
  • 四舍五入:33.33
  • 如果我的值是1.27845,我希望答案有3位小数,那么我的答案应该是

  • 四舍五入:1.279
  • 四舍五入:1.278
  • 如果我的值是33.33333,我希望答案有3位小数,那么我的答案应该是

  • 四舍五入:33.334
  • 四舍五入:33.333
  • 我想要所有情况下的通用解决方案。
    谢谢…

    您可以将以下“偏移”与地板和天花板一起使用

    DECLARE 
        @digit int = 2,
        @value decimal(10,5)=1.27845
    DECLARE
        @calc_scale int = POWER(10,@digit)
    
    SELECT 
        CAST(FLOOR (@value * @calc_scale)/@calc_scale AS DECIMAL(10,5)) as down,
        CAST(CEILING (@value * @calc_scale)/@calc_scale AS DECIMAL(10,5)) as up
    
    但是,目标数据类型将始终与查询中指定的相同(例如,上面示例中的精确编辑:比例为5)。 不能动态更改输出中的位数,因为此比例取决于变量的数据类型。您可以随意转换为VARCHAR数据类型并修剪不需要的数字,但我强烈反对

    如果只需要显示有效数字,我建议在应用层对其进行修剪。


    我无法添加我的代码继续收到此错误“提交答案时出错”因此添加为图片

    现在我们知道您想要什么,请与我们分享您已经尝试过的内容。可能重复@PM77-1我尝试过的
    ROUND()
    ,转换为十进制,天花板和地板的功能可以做到这一点,但我并没有找到我的问题的完整解决方案problem@PM77-1四舍五入不能完全解决我的问题。它可以在某些情况下使用,但我想完全解决我的问题。我以前也试过。@PM77-1它不是重复的。首先,充分阅读我的问题,并尝试我写的所有问题,然后确定它是否重复