public static void Main()
double start = 120100, end = 120228, fuelUsed = 6;
ConsumptionCalculator c = new ConsumptionCalculator(unit, start, end, fuelUsed);
Console.WriteLine(c.ToString());
public delegate double TwoInput(double a, double b);
public class ConsumptionCalculator
TwoInput DistancePerUnit = (a, b) => a / b;
static readonly double KM_MI_FACTOR = 1.60934;
static readonly double MI_KM_FACTOR = 0.62;
static readonly double LTR_GAL_FACTOR = 4.54609;
static readonly int RND = 2;
double altConsumption = 0;
string distanceUnit, altDistanceUnit, volumeUnit, altVolumeUnit;
double distanceTravelled, altDistanceTravelled, startOdoReading, endOdoReading, volumeConsumed, altVolumeConsumed;
public ConsumptionCalculator(string distanceUnit, double startOdo, double endOdo, double volume)
this.startOdoReading = startOdo;
this.endOdoReading = endOdo;
this.volumeConsumed = volume;
distanceTravelled = endOdoReading - startOdoReading;
distanceUnit = DistanceUnit.km.ToString();
volumeUnit = VolumeUnit.ltr.ToString();
altDistanceUnit = DistanceUnit.mi.ToString();
altVolumeUnit = VolumeUnit.gal.ToString();
altDistanceTravelled = Math.Round(distanceTravelled / KM_MI_FACTOR, RND);
altVolumeConsumed = Math.Round(volumeConsumed / LTR_GAL_FACTOR, RND);
distanceUnit = DistanceUnit.mi.ToString();
volumeUnit = VolumeUnit.gal.ToString();
altDistanceUnit = DistanceUnit.km.ToString();
altVolumeUnit = VolumeUnit.ltr.ToString();
altDistanceTravelled = Math.Round(distanceTravelled / MI_KM_FACTOR, RND);
altVolumeConsumed = Math.Round(volumeConsumed * LTR_GAL_FACTOR, RND);
private void Consumption()
consumption = Math.Round(DistancePerUnit(distanceTravelled, volumeConsumed), RND);
altConsumption = Math.Round(DistancePerUnit(altDistanceTravelled, altVolumeConsumed), RND);
public override string ToString()
return string.Format("You've travelled {0} {1} ({2} {3}) and consumed {4} {5} ({6} {7}) in doing so, which is {8} {1}/{5} ({9} {3}/{7})",
distanceTravelled, distanceUnit, altDistanceTravelled, altDistanceUnit, volumeConsumed, volumeUnit, altVolumeConsumed, altVolumeUnit, consumption, altConsumption);