2016-12-13 3 views
0

У меня есть таблица в mssql с ценой и налогом% предметов. Я поставил задачу округления всех предметов, где цена + налог равна ближайшему никелю, основанному на расчете (цена (tax_percent/100) + цена). Проблема я встретив в том, что они хотят, чтобы обновить цену перед расчетом, чтобы найти лучший результат, например:Цена за округление по цене + налог

price  tax_percent  price_tax_included  **Result** 
1.05  8.25%   1.13     price=1.07(price + tax = 1.15) 
1.02  8.25%   1.10     Don't change, already rounded 
1.12  8.25%   1.21     price=1.11(Price + tax = 1.20) 

Я не могу понять, лучший способ проверить, что изменить цену для расчет для работы с ближайшим никелем, а также круглый, основанный на том, если он ниже 0,02 или выше 0,3 цента.

+1

Покажите нам, что вы пытались и объяснить, почему он не работал. – dfundako

ответ

1

Вы можете использовать Modulo с %

rextester: http://rextester.com/MUJSMD91030

create table nickels (price_tax_included decimal(9,2)) 
insert into nickels values (1.20),(1.21),(1.22),(1.23),(1.24),(1.25) 

select price_tax_included 
    , toNickels = price_tax_included 
     + case when  price_tax_included % 0.05 > .02 
       then 0.05-(price_tax_included % 0.05) 
       else -1.00*(price_tax_included % 0.05) 
      end 
    from nickels 
+1

Отличное использование мод Zim – scsimon

2

Поскольку никель 1/двадцатый из доллара. Математика проста ... идите немного, чтобы потерять точность, а затем верните ее с округленной суммой.

Declare @Amt money = 1.13 
select round(@Amt*.2,2)/.2 

Возвращает

1.1500000 
+0

элегантный как всегда john. – scsimon

+0

@scsimon Спасибо за усмешку. –

+0

Jeez john, почему вы должны сделать все так красиво и просто? – SqlZim

Смежные вопросы