TSQL Round up decimal number

前端 未结 4 837
庸人自扰
庸人自扰 2021-01-13 23:56

I have this number 0.581183781439, I need to round the number 0.582

I was trying with

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


        
相关标签:
4条回答
  • 2021-01-14 00:01

    Maybe you need this?

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

    but correct rounding is 0.581.

    0 讨论(0)
  • 2021-01-14 00:17

    Adding a half value and using normal round will get the correct result.

    SELECT ROUND (0.581183781439 + .0005, 3)
    

    Bonus: Subtract the half value instead, and it will round down.

    EDIT: Actually, this has the same flaw as an answer above when the value is zeros after the 3rd decimal.

    0 讨论(0)
  • 2021-01-14 00:22
    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;
    

    Results:

    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
    
    0 讨论(0)
  • 2021-01-14 00:27

    We can write a T-SQL function to round up for an arbitrary number of decimal places.

    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)
    

    Result

    0.582

    0 讨论(0)
提交回复
热议问题