2016-06-22 3 views
0

私は、縮尺率を持つmeterIDの価格を計算しようとしています。私はそれがに等しい私は電卓で数量Xの価格を頼む場合紺碧価格電卓からの価格と比較すると、アルゴリズム(パブリック静的ダブルcomputeRatedUsagePerMeter(辞書率、ダブル用法)) https://github.com/PartnerCenterSamples/Commerce-API-DotNet/blob/master/Usage.csAzure Usage Scaled Rates価格

のためのガイドとして、この を使用します私が上記の方法から計算した数量X - 1の価格。

Microsoftから提供された方法が完全であるかどうか、あるいは正しい方向についてのヒントである場合は混乱します。


private static decimal computeRatedUsagePerMeter(Dictionary<decimal, decimal> rates, decimal usage) 
     { 
      decimal total = Decimal.Zero; 

      if (rates.Count == 0) 
       return Decimal.Zero; 
      else if (rates.Count == 1) 
       return (usage * rates.Values.FirstOrDefault()); 

      var remainingUsage = usage; 

      while (rates.Count > 0) 
      { 
       decimal LastKey = rates.Keys.Last(); 

       if (remainingUsage > LastKey) 
       { 
        decimal LastKeyValue = Decimal.Zero; 
        if (rates.TryGetValue(LastKey, out LastKeyValue)) 
        { 
         total = total + ((remainingUsage - LastKey + 1) * LastKeyValue); // remainingUsage - LastKey +1 because tiered pricing is exclusive 
         remainingUsage = LastKey - 1; 
        } 
        rates.Remove(LastKey); 
       } 
       else if (remainingUsage <= LastKey) 
       { 
        rates.Remove(LastKey); 
       } 
      } 
      return total; 
     } 

{ 
     "MeterId": "d23a5753-ff85-4ddf-af28-8cc5cf2d3882", 
     "MeterName": "Standard IO - Page Blob/Disk (GB)", 
     "MeterCategory": "Storage", 
     "MeterSubCategory": "Locally Redundant", 
     "Unit": "GB", 
     "MeterTags": [], 
     "MeterRegion": "", 
     "MeterRates": { 
     "0": 0.042165, 
     "1024": 0.0421650, 
     "51200": 0.0421650, 
     "512000": 0.0421650, 
     "1024000": 0.0379485, 
     "5120000": 0.0312021 
     }, 
     "EffectiveDate": "2014-02-01T00:00:00Z", 
     "IncludedQuantity": 0.0 
    } 

アズール価格計算が0.04 (価格はEURである)

を与えながら量1 = 0.084330の価格上記のリンクにより提供される方法によれば、そして別の例:lesは100個の量を言う。

方法:4.258665 EUR

Azureの計算= 4.22 EUR

4.22 EURで丸め99量= 4.216500方法。 azure calculator も< 1.00が原因の価格の計算は小数点以下を許可していません(そう0,5 GBは完全に合理的な量である。この場合には、そのGBで測定)0.5量を言うことができます料金を確認することはできません。

+0

例を含めることはできますか? –

+0

JSONスニペットは何かを計算することと何が関係していますか?使用したコード、予想される結果、実際に返されたコードを投稿してください。いくつかの*類似のコードへのリンクではありません。 –

+0

これは例であり、私もコードを追加します。コードが同じではありませんが、まったく同じであることがわかります。 – isioutis

答えて

1

アズール価格計算が与えながら 量1 = 0.084330の価格上記のリンクによって提供される方法によれば0.04

は、上記のコードを見ると( 価格はEURである)、Iコード自体に問題があると考えてください。基本的には、1 GBのストレージの価格は、0 - 1023の範囲になります。つまり、LastKeyの値は0です。だから、次のコードは、実行時に:それはあなたの0.0843300 + (1 - 0 + 1) * 0.042165)の合計を与える

total = total + ((remainingUsage - LastKey + 1) * LastKeyValue); 

も< 1.00は0.5量を言うことができます料金を確認することはできません(この 場合にはそのGBで測定されたので、0,5 GBは完全に合理的な量である) 原因の価格の計算は小数点以下を許可していません。

マイクロソフトの誰かが、電卓の設計方法とは何かについて、適切な答えを提供すると確信しています。

+0

私は、コードがMicrosoftの紺碧のギブスから取られていることを明確にしたいのは、唯一の違いは、私は2倍の10進数に変更したことです。確かに何か間違っていることを指摘していただきありがとうございます。 – isioutis

+0

でもMicrosoftは間違いが許されています:) –