基于价格+税收结果的舍入价格

时间:2016-12-13 21:55:38

标签: sql-server

我在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)

我无法找出最佳方法来检查更改价格的计算结果,以计算最接近的镍币以及基于其低于.02或高于.03美分的回合。

2 个答案:

答案 0 :(得分:2)

因为镍是1美元的20美元。数学很简单......小一点就失去了精度,然后用一个圆整的数量来恢复它。

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

返回

1.1500000

答案 1 :(得分: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