/// <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())); }
/// <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 )); }
/// <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 )); }
/// <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 )); }
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 )); }
/// <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 )); }
/// <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()); }
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 )); } }
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 // ) //); }
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) )); }
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) )); }
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)); }
public static bool IsZero <T>(IMeasurement <T> measurement) where T : IMeasurement <T> { Validate.NonNull(measurement, nameof(measurement)); return(measurement.ToDouble(measurement.MeasurementProvider.DefaultUnit) == 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))); }