private static ulong CalculateEstimatedUserConsumption(UserInvoice invoice, ulong realUserConsumption, ConsumptionValue commonConsumption) { Contract.Requires(commonConsumption != null); decimal estimatedUserConsumption = Convert.ToDecimal(commonConsumption.Estimated * realUserConsumption) / Convert.ToDecimal(commonConsumption.Real); invoice.GetConsumption().Estimated = Convert.ToUInt64(Math.Round(estimatedUserConsumption)); return(invoice.GetConsumption().Estimated); }
private static void FineGrainEstimatedUserConsumption(IEnumerable <UserInvoice> userInvoices, ulong totalCalculatedEstimatedConsumption, ConsumptionValue commonConsumption) { long estimatedConsumptionDiff = Convert.ToInt64(totalCalculatedEstimatedConsumption - commonConsumption.Estimated); foreach (var userInvoice in userInvoices) { if (estimatedConsumptionDiff > 0) { userInvoice.GetConsumption().Estimated--; estimatedConsumptionDiff--; } else if (estimatedConsumptionDiff < 0) { userInvoice.GetConsumption().Estimated++; estimatedConsumptionDiff++; } else { return; } } }
/// <summary> /// Calculate consumption sum /// </summary> /// <param name="consumption"></param> /// <returns></returns> public static ulong Sum(this ConsumptionValue consumption) { Contract.Requires(consumption != null); return(consumption.Estimated + consumption.Real); }