Round in MS SQL on 0.05 or 0.00

2019-03-03 18:44发布

Hello I am coming from Bosnia and Herzegovina and in our county the smallest note bill is 0.05, Now the government pushing us to our retrial prices rounding on 0.05 or at 0.00. Therefor I want to create SQL Scalar Valued Function for rounding the prices on given value. Is there some build in solution so I can save resource of my queries. Thanx in advice Best regards

Edit from comment:

  • 0,1,2,3,4 go to zero
  • 5,6,7,8,9 going to zero+1

2条回答
霸刀☆藐视天下
2楼-- · 2019-03-03 19:06

Thanks to marc_s, i changed to money datatype.

float vs decimal vs money datatype article and flowchart

ALTER FUNCTION dbo.ufnRound (@number money)
RETURNS money
AS
BEGIN
    RETURN FLOOR(@number*20) / 20
END
GO
SELECT dbo.ufnRound (1.22), dbo.ufnRound (1.23), dbo.ufnRound (1.27), dbo.ufnRound (1.28)

-- gives    1.2    1.2   1.25   1.25
查看更多
Luminary・发光体
3楼-- · 2019-03-03 19:14

There's nothing built-in - but it's easy enough to create:

EDIT : adapted to your special rounding needs :-)

create function dbo.RoundToFiveOrZero(@inputValue MONEY)
returns MONEY
as begin
  return FLOOR((@inputValue + 0.05) * 20.0) / 20.0
end

Use the DECIMAL or MONEY data type - whatever suits you best.

Use it like this:

select 
    dbo.RoundToFiveOrZero(1.51),
    dbo.RoundToFiveOrZero(1.53),
    dbo.RoundToFiveOrZero(7.33),
    dbo.RoundToFiveOrZero(7.37),
    dbo.RoundToFiveOrZero(7.39)

Which gives you 1.50, 1.50, 7.30, 7.40, 7.40 as results.

Marc

查看更多
登录 后发表回答