Раунд в MS SQL по 0,05 или 0,00 - PullRequest
       11

Раунд в MS SQL по 0,05 или 0,00

0 голосов
/ 15 апреля 2009

Здравствуйте, я приехал из Боснии и Герцеговины, и в нашем округе наименьший счет для банкнот составляет 0,05, Теперь правительство подталкивает нас к повторному округлению цен на 0,05 или 0,00. Для этого я хочу создать SQL Scalar Valued Function для округления цен по заданному значению. Есть ли какое-то встроенное решение, чтобы я мог сохранить ресурс моих запросов. Спасибо в совете С наилучшими пожеланиями

Редактировать из комментария:

  • 0,1,2,3,4 перейти на ноль
  • 5,6,7,8,9 идет к нулю + 1

Ответы [ 2 ]

4 голосов
/ 15 апреля 2009

Нет ничего встроенного - но его достаточно легко создать:

РЕДАКТИРОВАТЬ: адаптировано к вашим специальным потребностям округления: -)

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 голос
/ 15 апреля 2009

Благодаря marc_s я перешел на тип данных 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
...