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;
}
}
}