Exemple #1
0
        /// <summary>
        /// Returns a <see cref="System.String" /> that represents this instance.
        /// </summary>
        /// <param name="units">The units.</param>
        /// <returns>
        /// A <see cref="System.String" /> that represents this instance.
        /// </returns>
        public static string ToString <TSelf>(this IMeasurement <TSelf> measurement, Unit <TSelf> unit1, params Unit <TSelf>[] units)
            where TSelf : IMeasurement <TSelf>
        {
            Validate.NonNull(measurement, nameof(measurement));
            Validate.NonNull(unit1, nameof(unit1));
            Validate.NonNull(units, nameof(units));

            units = units.Concat(new[] { unit1 }).OrderBy(x => measurement.ToDouble(x)).ToArray();
            var unit = units.FirstOrDefault(x => measurement.ToDouble(x) >= 1) ??
                       units.FirstOrDefault() ??
                       measurement.MeasurementProvider.ParsableUnits.FirstOrDefault() ??
                       measurement.MeasurementProvider.DefaultUnit;

            return(measurement.ToString(unit, "0.##"));
        }
        public static T Multiply <T>(this IMeasurement <DoubleMeasurement> d, Measurement <T> measurement) where T : IMeasurement <T>
        {
            Validate.NonNull(d, nameof(d));
            Validate.NonNull(measurement, nameof(measurement));

            return(measurement.Multiply(d.ToDouble()));
        }
Exemple #3
0
        /// <summary>
        /// Divides this instance by the specified measurement.
        /// </summary>
        /// <param name="measurement2">The other measurement.</param>
        /// <returns></returns>
        public static DoubleMeasurement Divide <T>(this IMeasurement <T> measurement1, IMeasurement <T> measurement2)
            where T : IMeasurement <T>
        {
            Validate.NonNull(measurement1, nameof(measurement1));
            Validate.NonNull(measurement2, nameof(measurement2));

            return(measurement1.ToDouble(measurement1.MeasurementProvider.DefaultUnit) / measurement2.ToDouble(measurement1.MeasurementProvider.DefaultUnit));
        }
        protected T2 DivideToSecond(IMeasurement <T1> that)
        {
            Validate.NonNull(that, nameof(that));

            return(this.Item2Provider.CreateMeasurement(
                       this.ToDouble(this.MeasurementProvider.DefaultUnit) / that.ToDouble(that.MeasurementProvider.DefaultUnit),
                       this.Item2Provider.DefaultUnit
                       ));
        }
Exemple #5
0
        /// <summary>
        /// Returns the absolute value of this instance
        /// </summary>
        /// <returns></returns>
        public static T Abs <T>(this IMeasurement <T> measurement) where T : IMeasurement <T>
        {
            Validate.NonNull(measurement, nameof(measurement));

            return(measurement.MeasurementProvider.CreateMeasurement(
                       measurement.ToDouble(measurement.MeasurementProvider.DefaultUnit),
                       measurement.MeasurementProvider.DefaultUnit
                       ));
        }
        protected T1 DivideToFirst(IMeasurement <T2> that)
        {
            Validate.NonNull(that, nameof(that));

            return(this.Item1Provider.CreateMeasurement(
                       this.Value / that.ToDouble(that.MeasurementProvider.DefaultUnit),
                       this.Item1Provider.DefaultUnit
                       ));
        }
Exemple #7
0
        /// <summary>
        /// Multiplies this instance by the specified double.
        /// </summary>
        /// <param name="factor">The double to multiply by.</param>
        /// <returns></returns>
        public static TSelf Multiply <TSelf>(this IMeasurement <TSelf> measurement, double factor)
            where TSelf : IMeasurement <TSelf>
        {
            Validate.NonNull(measurement, nameof(measurement));

            return(measurement.MeasurementProvider.CreateMeasurement(
                       measurement.ToDouble(measurement.MeasurementProvider.DefaultUnit) * factor,
                       measurement.MeasurementProvider.DefaultUnit
                       ));
        }
Exemple #8
0
        public static PrefixableUnit <T> ToPrefixableUnit <T>(this IMeasurement <T> measurement, string symbol) where T : IMeasurement <T>
        {
            Validate.NonNull(measurement, nameof(measurement));
            Validate.NonNull(symbol, nameof(symbol));

            return(new PrefixableUnit <T>(
                       symbol,
                       measurement.ToDouble(measurement.MeasurementProvider.DefaultUnit),
                       measurement.MeasurementProvider
                       ));
        }
Exemple #9
0
        /// <summary>
        /// Subtracts the this instance by another measurement
        /// </summary>
        /// <param name="measurement2">The other measurement.</param>
        /// <returns></returns>
        public static T Subtract <T>(this IMeasurement <T> measurement1, IMeasurement <T> measurement2)
            where T : IMeasurement <T>
        {
            Validate.NonNull(measurement1, nameof(measurement1));
            Validate.NonNull(measurement2, nameof(measurement2));

            return(measurement1.MeasurementProvider.CreateMeasurement(
                       measurement1.ToDouble(measurement1.MeasurementProvider.DefaultUnit) - measurement2.ToDouble(measurement1.MeasurementProvider.DefaultUnit),
                       measurement1.MeasurementProvider.DefaultUnit
                       ));
        }
Exemple #10
0
        /// <summary>
        /// Returns a <see cref="System.String" /> that represents this instance.
        /// </summary>
        /// <param name="unit">The unit.</param>
        /// <param name="format">The format.</param>
        /// <returns>
        /// A <see cref="System.String" /> that represents this instance.
        /// </returns>
        public static string ToString <T>(this IMeasurement <T> measurement, Unit <T> unit, string format)
            where T : IMeasurement <T>
        {
            Validate.NonNull(measurement, nameof(measurement));
            Validate.NonNull(unit, nameof(unit));
            Validate.NonNull(format, nameof(format));

            string unitStr = IsInfinity(measurement) || IsNan(measurement)
                ? ""
                : " " + unit.ToString();

            return((measurement.ToDouble(unit).ToString(format) + unitStr).Trim());
        }
Exemple #11
0
        public static T ToMeasurement <T>(this IMeasurement <T> measurement)
            where T : IMeasurement <T>
        {
            Validate.NonNull(measurement, nameof(measurement));

            if (measurement is T t)
            {
                return(t);
            }
            else
            {
                return(measurement.MeasurementProvider.CreateMeasurement(
                           measurement.ToDouble(measurement.MeasurementProvider.DefaultUnit),
                           measurement.MeasurementProvider.DefaultUnit
                           ));
            }
        }
Exemple #12
0
        public TNumerator Multiply(IMeasurement <TDenominator> denominator)
        {
            Validate.NonNull(denominator, nameof(denominator));

            return(this.NumeratorProvider.CreateMeasurement(
                       this.Value * denominator.ToDouble(denominator.MeasurementProvider.DefaultUnit),
                       this.NumeratorProvider.DefaultUnit
                       ));

            //return NumeratorProvider.CreateMeasurement(
            //    this.ToDouble(this.MeasurementProvider.ReferenceUnit) * denominator.ToDouble(denominator.MeasurementProvider.ReferenceUnit),
            //    new Unit<TNumerator>(
            //        "",
            //        this.MeasurementProvider.ReferenceUnit.DefaultsPerUnit * denominator.MeasurementProvider.ReferenceUnit.DefaultsPerUnit / NumeratorProvider.ReferenceUnit.DefaultsPerUnit,
            //        NumeratorProvider
            //    )
            //);
        }
Exemple #13
0
        public static int Compare <T>(IMeasurement <T> measurement1, IMeasurement <T> measurement2) where T : IMeasurement <T>
        {
            if (measurement1 == null && measurement2 == null)
            {
                return(0);
            }
            else if (measurement1 == null || measurement2 == null)
            {
                return(1);
            }

            return(measurement1.ToDouble(
                       measurement1.MeasurementProvider.DefaultUnit
                       )
                   .CompareTo(
                       measurement2.ToDouble(measurement1.MeasurementProvider.DefaultUnit)
                       ));
        }
Exemple #14
0
        public static bool Equals <T>(IMeasurement <T> measurement1, IMeasurement <T> measurement2) where T : IMeasurement <T>
        {
            if (measurement1 == null && measurement2 == null)
            {
                return(true);
            }
            else if (measurement1 == null || measurement2 == null)
            {
                return(false);
            }

            return(measurement1.ToDouble(
                       measurement1.MeasurementProvider.DefaultUnit
                       )
                   .Equals(
                       measurement2.ToDouble(measurement1.MeasurementProvider.DefaultUnit)
                       ));
        }
Exemple #15
0
 protected Ratio(IMeasurement <TNumerator> numerator, IMeasurement <TDenominator> denominator, MeasurementProvider <TSelf> provider) : this(
         numerator.ToDouble(numerator.MeasurementProvider.DefaultUnit) / denominator.ToDouble(denominator.MeasurementProvider.DefaultUnit),
         numerator.MeasurementProvider.DefaultUnit.DivideToRatioUnit(denominator.MeasurementProvider.DefaultUnit).ToRatioUnit(provider)
         )
 {
 }
 protected Term(IMeasurement <T1> item1, IMeasurement <T2> item2, MeasurementProvider <TSelf> provider) : base(
         item1.ToDouble(item1.MeasurementProvider.DefaultUnit) * item2.ToDouble(item2.MeasurementProvider.DefaultUnit),
         item1.MeasurementProvider.DefaultUnit.MultiplyToTermUnit(item2.MeasurementProvider.DefaultUnit).ToTermUnit(provider)
         )
 {
 }
 public static double ToDouble(this IMeasurement <DoubleMeasurement> d)
 {
     Validate.NonNull(d, nameof(d));
     return(d.ToDouble(DoubleMeasurement.Units.DefaultUnit));
 }
Exemple #18
0
        public static bool IsZero <T>(IMeasurement <T> measurement) where T : IMeasurement <T>
        {
            Validate.NonNull(measurement, nameof(measurement));

            return(measurement.ToDouble(measurement.MeasurementProvider.DefaultUnit) == 0);
        }
Exemple #19
0
        public static bool IsInfinity <T>(IMeasurement <T> measurement) where T : IMeasurement <T>
        {
            Validate.NonNull(measurement, nameof(measurement));

            return(double.IsInfinity(measurement.ToDouble(measurement.MeasurementProvider.DefaultUnit)));
        }