2016-12-13 13 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.03セント以上の場合に基づいて計算する。

+1

は、あなたが試みられ、それが仕事をdidntの理由を説明したものたちを表示します。 – dfundako

答えて

1

あなたは%

rextesterでModuloを使用することができます:ニッケルは、ドルの1/20であるので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

mod Zimの偉大な使用 – scsimon

2

。数学はシンプルです...小さなものから精密度を失ってから、それを丸めて戻します。

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

戻り

1.1500000 
+0

これまでのようにエレガント。 – scsimon

+0

@scsimon笑顔をありがとう。 –

+0

Jeez john、なぜあなたはすべてがとても素敵でシンプルになるのですか? – SqlZim

関連する問題