using LoreSoft.MathExpressions.Metadata; using System.ComponentModel; namespace LoreSoft.MathExpressions.UnitConversion { /// Units for Liquid Volume public enum VolumeUnit { /// Milliliter unit (ml) [Abbreviation("ml")] Milliliter = 0, /// Liter unit (l) [Abbreviation("l")] Liter = 1, /// Kiloliter unit (kl) [Abbreviation("kl")] Kiloliter = 2, /// Fluid ounce unit (oz) [Abbreviation("oz")] [Description("Fluid Ounce")] FluidOunce = 3, /// Cup unit (cup) [Abbreviation("cup")] Cup = 4, /// Pint unit (pt) [Abbreviation("pt")] Pint = 5, /// Quart unit (qt) [Abbreviation("qt")] Quart = 6, /// Gallon unit (gal) [Abbreviation("gal")] Gallon = 7 } /// /// Class representing liquid volume convertion. /// public static class VolumeConverter { // In enum order private static readonly double[] factors = new double[] { 0.000001d, //milliliter 0.001d, //liter 1d, //kiloliter 0.0037854118d/128d, //ounce [US, liquid] 0.0037854118d/16d, //cup [US] 0.0037854118d/8d, //pint [US, liquid] 0.0037854118d/4d, //quart [US, liquid] 0.0037854118d, //gallon [US, liquid] }; /// /// Converts the specified from unit to the specified unit. /// /// Covert from unit. /// Covert to unit. /// Covert from value. /// The converted value. public static double Convert( VolumeUnit fromUnit, VolumeUnit toUnit, double fromValue) { if (fromUnit == toUnit) return fromValue; double fromFactor = factors[(int)fromUnit]; double toFactor = factors[(int)toUnit]; double result = fromFactor * fromValue / toFactor; return result; } } }