2016-09-15 16 views
0

私は、売り上げ以上の手数料の異なる種類の異なるスキーマを持っています。 0から10.000€までの手数料は2%、手数料は10.001から20.000、手数料は2.5%、20.001から30.000は3%の手数料です。手数料が5%以上になるまで。閾値額と手数料は、リストのデータベースから取られます。問題は、特定の基準を達成するために年初から販売を考慮に入れなければならないが、今月の販売のための手数料を計算することだけである。たとえば、ある月の売上が30.000で、累計売上が8.000である場合、計算は:2.000で2,000、10.000で2.5%、10.000で3%、8.000で3.5%となります。これは私が持っているコードですが、うまく動作しません。どんな助けもありがとう。前もって感謝します。手数料の金額を計算してください

  foreach (var bound in fxCollection) 
      { 
       if (antAmount < bound.FinalAmount) 
       { 
        if (antAmount >= bound.InitialAmount && antAmount <= bound.FinalAmount) 
        { 
         if (totalAmount > bound.FinalAmount) 
         { 
          totalAmountCardSchema = totalPeriod - (bound.FinalAmount.Value - antAmount); 
          totalCommission += (bound.FinalAmount.Value - antAmount) * (bound.Commission/100); 
         } 
         else 
         { 
          totalCommission += totalPeriod * (bound.Commission/100); 
          totalCommission = 0; 
         } 
        } 
        else 
        { 
         if ((bound.FinalAmount - bound.InitialAmount) < totalAmountCardSchema) 
         { 
          if (index == count) //last loop 
          { 
           totalCommission += totalAmountCardSchema * (bound.Commission/100); 
           totalAmountCardSchema = 0; 
          } 
          else 
          { 
           totalCommission += (bound.FinalAmount.Value - bound.InitialAmount.Value) * (bound.Commission/100); 
           totalAmountCardSchema = totalAmountCardSchema - (bound.FinalAmount.Value - bound.InitialAmount.Value); 
          } 
         } 
         else if (totalAmountCardSchema > 0) 
         { 
          totalCommission += totalAmountCardSchema * (bound.Commission/100); 
          totalAmountCardSchema = 0; 
         } 
        } 
       } 
       index++; 
       var valueInvoiceLine = totalCommission; 

明確にする: はい、これがポイントです。この例では問題ありません。明確にするために、1月1日から5月31日までの売上高は8.000で、1ヶ月の売上高は30.000でした。今月の手数料を計算するためにいくつかのバンドにループを入れたいが、この月の最初のバンドを計算する最初のバンドを達成するためには、今年の最初の日以降の売上を追加する必要があるので、この例を置く。この例では、最初のバンドは0から10.000ですが、年の最初の日(8.000)に売上を加え、次に月の売上(30.000)を追加する必要があります。最初のバンド2番目のバンドでは10.000を、3番目のバンドでは10.000を、4番目のバンドでは残りのバンド(8.000)を取らなければなりません。申し訳ありませんが、それは非常に明確ではない場合。あなたが理解することを願っています。ありがとうございます。今では、ルールが適用されたときにしなければならないかを理解するのは難しいされるよう

+0

のようなものを試してみてください。あなたはそれを明確にしてください。 – Fabjan

+1

合意。あなたのサンプルでは、​​年の累計(累計)は8、その月は30未満です。これは、毎月がまだ累積に追加されていない限り理にかなっていません。手数料の論理を明記してください。コーディングの手助けができます。 –

+0

私は明確にしようとしました。 FabjanとShannonに感謝します。 – TibyDublin

答えて

1

は、まあこの

  decimal totalAmount = 35; 
      decimal commission = 0.0M; 
      decimal commissionAmount = 0.0M; 

      Dictionary<decimal,decimal> commissions = new Dictionary<decimal,decimal>() { 
       { 0, .02M}, ///2% 
       { 10, .005M}, //2.5% 
       { 20, .005M}, //3.0% 
       { 30, .005M}, //3.5% 
       { 40, .005M}, //4.0% 
       { 50, .005M}, //4.5% 
       { 60, .005M}, //5.0% 
      }; 

      foreach (decimal key in commissions.Keys) 
      { 
       if (totalAmount > key) 
       { 
        commissionAmount = totalAmount - key; 
       } 
       else 
       { 
        commissionAmount = totalAmount - key < 0 ? 0 : totalAmount - key; 
       } 
       commission += commissionAmount * commissions[key]; 
      } 
+0

Jdweng:答えをありがとうが、私はモンで手数料を計算するための元売上高を取る必要があります。あなたの例では、前の売上高が8である場合、最初のバンド(2%)で10-8 * 2%を計算してから残りの33バンドルに従うだけです。 – TibyDublin

+0

答えを確認しましたか?私は卒業した委員会のために計算をより効率的にやっています。私はすべての2%、次に10%を上回るすべてのものの0.5%、20%を上回るすべてのものの0.5%、30%を上回る0.5%を行っています。結果は同じです。 – jdweng

+0

はい、ソリューションがより効率的です。私が必要とするのは、あなたが前の月の売上を考慮して委員会を計算し始めることができないからです。例えば、前月の売上高が35.000、今月の売上高が10.000の場合、30%から40.000%の間で5.000を3.5%で計算し、残りの5.000%を40%から50.000%の4% 。どうすればいいのか教えてください。ありがとうございます。 – TibyDublin

関連する問題