简体   繁体   English

用T-SQL中的条件舍入十进制数

[英]Rounding up decimal number with condition in T-SQL

I have a ASP function as below for rounding up the amount: 我有一个ASP功能,如下所示:

function GetRoundedVal(amount)

NoOfRight = right(formatnumber(amount,2),1)

if NoOfRight = 0 then
    roundedAmount = amount
elseif NoOfRight = 1 then
    roundedAmount = amount - 0.01
elseif NoOfRight = 2 then
    roundedAmount = amount - 0.02
elseif NoOfRight = 3 then
    roundedAmount = amount + 0.02
elseif NoOfRight = 4 then
    roundedAmount = amount + 0.01
elseif NoOfRight = 5 then
    roundedAmount = amount
elseif NoOfRight = 6 then
    roundedAmount = amount - 0.01
elseif NoOfRight = 7 then
    roundedAmount = amount - 0.02
elseif NoOfRight = 8 then
    roundedAmount = amount + 0.02
elseif NoOfRight = 9 then
    roundedAmount = amount + 0.01
else
end if

GetRoundedVal = roundedAmount

end function

The result should be like this: 结果应该是这样的:

+----------------+--------+
| Original Value | Result |
+----------------+--------+
| 19.91          | 19.90  | Original Value - 0.01
| 19.92          | 19.90  | Original Value - 0.02
| 19.93          | 19.95  | Original Value + 0.02
| 19.94          | 19.95  | Original Value + 0.01
| 19.95          | 19.95  | 
| 19.96          | 19.95  | Original Value - 0.01
| 19.97          | 19.95  | Original Value - 0.02
| 19.98          | 20.00  | Original Value + 0.02
| 19.99          | 20.00  | Original Value + 0.01
+----------------+--------+

The question is can we do this directly on T-SQL? 问题是我们可以直接在T-SQL上执行此操作吗?
SQL Server V14. SQL Server V14。
If it even possible. 如果它甚至可能。

Thanks. 谢谢。

You can try this. 你可以试试这个。

DECLARE @MyTable TABLE(OriginalValue DECIMAL(18,2))
INSERT INTO @MyTable VALUES (19.91), (19.92), (19.93), (19.94), (19.95),    (19.96), (19.97), (19.98), (19.99)

SELECT 
       OriginalValue, 
       ROUND( ( OriginalValue / 0.05 ), 0, 0 ) * 0.05 Result 
FROM @MyTable

Result: 结果:

OriginalValue                           Result
--------------------------------------- ---------------------------------------
19.91                                   19.90000000
19.92                                   19.90000000
19.93                                   19.95000000
19.94                                   19.95000000
19.95                                   19.95000000
19.96                                   19.95000000
19.97                                   19.95000000
19.98                                   20.00000000
19.99                                   20.00000000

try This 试试这个

DECLARE @Inp TABLE
(
    Org DECIMAL(10,4),
    Res DECIMAL(10,2)
)

INSERT INTO @Inp
(
    Org
)
VALUES(19.91),
    (19.92),
    (19.93),
    (19.94),
    (19.95),
    (19.96),
    (19.97),
    (19.98),
    (19.99)

SELECT
    *,
    Result = CAST(
    Org +
    CASE RIGHT(CAST(Org AS DECIMAL(10,2)),1)
       WHEN 1 THEN -0.01
       WHEN 2 THEN -0.02
       WHEN 3 THEN 0.02
       WHEN 4 THEN 0.01
       WHEN 5 THEN 0
       WHEN 6 THEN -0.01
       WHEN 7 THEN -0.02
       WHEN 8 THEN 0.02
       WHEN 9 THEN 0.01
       ELSE 0 END
       AS DECIMAL(10,2))
    FROM @Inp


----------

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM