我在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美分的回合。
答案 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