您好,我来自波斯尼亚和黑塞哥维那,在我们县,最小的钞票是 0.05,现在政府推动我们将重试价格四舍五入为 0.05 或 0.00。因此,我想创建 SQL Scalar Valued Function 来四舍五入给定值的价格。是否有一些内置解决方案,以便我可以节省查询资源。谢谢你的建议最好的问候
从评论编辑:
- 0,1,2,3,4 归零
- 5,6,7,8,9 归零+1
您好,我来自波斯尼亚和黑塞哥维那,在我们县,最小的钞票是 0.05,现在政府推动我们将重试价格四舍五入为 0.05 或 0.00。因此,我想创建 SQL Scalar Valued Function 来四舍五入给定值的价格。是否有一些内置解决方案,以便我可以节省查询资源。谢谢你的建议最好的问候
从评论编辑:
没有内置任何东西 - 但它很容易创建:
编辑:适应您的特殊舍入需求:-)
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。
马克
感谢 marc_s,我更改为 money 数据类型。
float vs decimal vs money 数据类型文章和流程图
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