【问题标题】:TSQL Round up decimal numberTSQL 向上取整十进制数
【发布时间】:2012-12-27 18:09:40
【问题描述】:

我有这个数字 0.581183781439,我需要对数字 0.582 进行四舍五入

我正在尝试

SELECT ROUND (0.581183781439, 3)
-------------------------------
0.581000000000

ROUND 函数有用吗?

【问题讨论】:

    标签: sql-server tsql rounding


    【解决方案1】:
    DECLARE @Test TABLE (Col NUMERIC(38,12));
    
    INSERT  @Test (Col)
    SELECT 0.581183781439 
    UNION ALL
    SELECT 0.5815
    UNION ALL
    SELECT 0.581883781439
    UNION ALL
    SELECT -0.581883781439;
    
    SELECT Col AS [Col],
        ROUND(Col, 3) AS StandardRounding_3decimals,
        ROUND(Col, 3, 1) AS Truncation_3decimals,
        FLOOR(Col*1000)/1000 AS RoundDown_3decimals,
        CEILING(Col*1000)/1000  AS RoundUp_3decimals 
    FROM @Test;
    

    结果:

    Col             StandardRounding_3decimals Truncation_3decimals RoundDown_3decimals RoundUp_3decimals
    --------------- -------------------------- -------------------- ------------------- -----------------
    0.581183781439  0.581000000000             0.581000000000       0.581000            0.582000
    0.581500000000  0.582000000000             0.581000000000       0.581000            0.582000
    0.581883781439  0.582000000000             0.581000000000       0.581000            0.582000
    -0.581883781439 -0.582000000000            -0.581000000000      -0.582000           -0.581000
    

    【讨论】:

      【解决方案2】:

      也许你需要这个?

      SELECT ROUND(0.581183781439, 3,1) + .001
      

      但正确的舍入是0.581

      【讨论】:

      • 嗯,这是个好主意。
      • 是的,在这种情况下我总是需要四舍五入。
      • 我很难相信 OP 真的希望将 0.581000000000 的值四舍五入到 0.582。
      【解决方案3】:

      我们可以编写一个 T-SQL 函数来四舍五入任意小数位。

      CREATE FUNCTION RoundUp (@value float, @places int) RETURNS float
      AS
      BEGIN
          RETURN SELECT CEILING(@value * POWER(10, @places)) / POWER(10, @places)
      END
      GO
      
      SELECT Result = dbo.RoundUp(0.581183781439, 3)
      

      结果

      0.582

      【讨论】:

        【解决方案4】:

        加上一个半值并使用正常的回合会得到正确的结果。

        SELECT ROUND (0.581183781439 + .0005, 3)
        

        奖励:减去一半的值,它会向下舍入。

        编辑:实际上,当小数点后第三位为零时,这与上面的答案具有相同的缺陷。

        【讨论】:

          猜你喜欢
          • 2021-04-12
          • 1970-01-01
          • 2011-12-04
          • 1970-01-01
          • 2021-09-29
          • 2014-04-16
          • 2011-04-26
          • 2011-07-12
          • 1970-01-01
          相关资源
          最近更新 更多