在MS SQL中舍入0.05或0.00

时间:2009-04-15 16:49:11

标签: sql sql-server tsql user-defined-functions

您好我来自波斯尼亚和黑塞哥维那,在我们县,最小的票据是0.05, 现在,政府将我们的再审价格推至0.05或0.00。 因此,我想创建SQL标量值函数来舍入给定值的价格。 是否有一些构建解决方案,所以我可以节省我的查询资源。 Thanx在建议中 最好的问候

从评论中编辑:

  • 0,1,2,3,4归零
  • 5,6,7,8,9为零+ 1

2 个答案:

答案 0 :(得分:4)

没有任何内置功能 - 但它很容易创建:

编辑:适应您的特殊舍入需求: - )

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

使用DECIMAL或MONEY数据类型 - 任何最适合您的数据。

像这样使用:

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

结果为1.50,1.50,7.30,7.40,7.40。

马克

答案 1 :(得分:1)

感谢marc_s,我改为money数据类型。

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