Exemple #1
0
        /// <summary>
        /// Convert distance in metric unit to imperial / us unit
        /// </summary>
        /// <typeparam name="T">distance type</typeparam>
        /// <param name="distance">numeric distance</param>
        /// <param name="from">Metric unit</param>
        /// <param name="to">Imperial / us unit</param>
        /// <param name="decimals">number of decimals in output </param>
        /// <returns>The converted double imperial value</returns>
        public static double ConvertDistance <T>(this T distance, DistanceUnitsMetrics from,
                                                 DistanceUnitsImperialUS to, int?decimals = null) where T :
        struct,
        IComparable,
        IComparable <T>,
        IConvertible,
        IEquatable <T>,
        IFormattable
        {
            var dd = (double)Convert.ChangeType(distance, typeof(double));

            if (from != DistanceUnitsMetrics.Meter)
            {
                dd = dd.ConvertDistance(from, DistanceUnitsMetrics.Meter);
            }

            var imperial = dd / ImperialUsInMeters[to.ToString()];

            return(decimals != null?Math.Round(imperial, (int)decimals) : imperial);
        }
Exemple #2
0
        /// <summary>
        /// Convert a Imperial / US numeric value from one unit to another unit
        /// </summary>
        /// <typeparam name="T">The numeric type</typeparam>
        /// <param name="distance">Numeric in imperial / us unit to convert to another unit </param>
        /// <param name="from">Current imperial / us value to convert from</param>
        /// <param name="to">Imperial / us unit to convert distance to</param>
        /// <param name="decimals">Number of decimals in return value</param>
        /// <returns>Converted distance </returns>
        public static double ConvertDistance <T>(this T distance, DistanceUnitsImperialUS from,
                                                 DistanceUnitsImperialUS to, int?decimals = null) where T :
        struct,
        IComparable,
        IComparable <T>,
        IConvertible,
        IEquatable <T>,
        IFormattable
        {
            var    dd = (double)Convert.ChangeType(distance, typeof(double));
            double result;

            if (from == to)
            {
                return(dd);
            }

            if (from == DistanceUnitsImperialUS.Inch)
            {
                result = dd / (double)to;
                return(decimals != null?Math.Round(result, (int)decimals) : result);
            }

            if (to == DistanceUnitsImperialUS.Inch)
            {
                result = dd * (double)from;
                return(decimals != null?Math.Round(result, (int)decimals) : result);
            }

            if ((int)from > (int)to)
            {
                result = dd * ((double)from / (double)to);
                return(decimals != null?Math.Round(result, (int)decimals) : result);
            }

            result = dd * ((double)from / (double)to);

            return(decimals != null?Math.Round(result, (int)decimals) : result);
        }
Exemple #3
0
        /// <summary>
        /// Convert Imperial / us unit to metric unit
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="distance">Distance to convert</param>
        /// <param name="from">Current unit</param>
        /// <param name="to">Unit to convert to</param>
        /// <param name="decimals">number of decimals in output</param>
        /// <returns>Converted distance</returns>
        public static double ConvertDistance <T>(this T distance, DistanceUnitsImperialUS from,
                                                 DistanceUnitsMetrics to, int?decimals = null) where T :
        struct,
        IComparable,
        IComparable <T>,
        IConvertible,
        IEquatable <T>,
        IFormattable
        {
            var dd = (double)Convert.ChangeType(distance, typeof(double));

            var meters = dd * ImperialUsInMeters[from.ToString()];

            if (to == DistanceUnitsMetrics.Meter)
            {
                return(decimals != null?Math.Round(meters, (int)decimals) : meters);
            }

            var metric = meters.ConvertDistance(DistanceUnitsMetrics.Meter, to);

            return(decimals != null?Math.Round(metric, (int)decimals) : metric);
        }
Exemple #4
0
 public Distance <T> From(DistanceUnitsImperialUS from)
 {
     _fromUnit = from;
     return(this);
 }
Exemple #5
0
 public Distance <T> To(DistanceUnitsImperialUS to)
 {
     _toUnit = to;
     return(this);
 }