스케일링 된 속도를 가진 meterID의 가격을 계산하려고합니다. 나는 그것이 같다 내가 계산기에 수량 X의 가격을 요구하는 경우 푸른 가격 계산기에서 가격 비교 알고리즘 (공공 정적 더블 computeRatedUsagePerMeter (사전 요금을 두 번 사용)) https://github.com/PartnerCenterSamples/Commerce-API-DotNet/blob/master/Usage.cs푸른 색 사용 비율 스케일링 가격
에 대한 지침으로이 를 사용 위의 방법으로 계산하지만 수량 X - 1에 대한 가격.
Microsoft에서 제공하는 방법이 완전한지 아닌지, 아니면 올바른 방향에 대한 힌트 일 경우 혼란 스럽습니다. 푸른 가격 계산기 동안 수량 1 = 0.084330의 가격 상기 링크에 의해 제공되는 방법에 따르면
{
"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
}
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;
}
0.04 (가격은 EUR에서)
을 준다 그리고 또 다른 예 : les은 100 개의 수량을 말합니다.
방법 : 4.258665 EUR
푸른 계산기 = 4.22 EUR
4.22 EUR 인 반올림 99 수량 = 4.216500위한 방법. 도 확인할 수 없습니다. < 1.00은 0.5 수량 (이 경우 GB 단위로 측정되므로 0,5 GB는 완벽하게 합리적인 수량 임)으로 계산할 수 있습니다. 원인은 가격 계산기가 소수를 허용하지 않기 때문입니다.
예제를 포함시킬 수 있습니까? –
JSON 코드는 무엇을 계산해야합니까? 사용하는 코드, 예상 결과 및 실제로 반환 된 코드를 게시하십시오.* 비슷한 * 코드 –
에 대한 링크가 아니며 코드도 추가됩니다. 코드가 비슷하지만 정확히 동일하지는 않습니다. – isioutis