public Ratio <TThatDenom, TDenominator> DivideToRatio <TThatDenom, E>(Ratio <E, TNumerator, TThatDenom> that) where TThatDenom : IMeasurement <TThatDenom> where E : Ratio <E, TNumerator, TThatDenom> { Validate.NonNull(that, nameof(that)); var provider = Ratio <TThatDenom, TDenominator> .GetProvider(that.DenominatorProvider, this.DenominatorProvider); return(provider.CreateMeasurement(this.Value / that.Value, provider.DefaultUnit)); //var toMult = that.Reciprocal(); //return provider.CreateMeasurement( // this.ToDouble(this.MeasurementProvider.ReferenceUnit) / this.NumeratorProvider.ReferenceUnit.DefaultsPerUnit / that.ToDouble(that.MeasurementProvider.ReferenceUnit) * that.NumeratorProvider.ReferenceUnit.DefaultsPerUnit, // new Unit<Ratio<TThatDenom, TDenominator>>( // "", // that.DenominatorProvider.ReferenceUnit.DefaultsPerUnit / this.DenominatorProvider.ReferenceUnit.DefaultsPerUnit, // provider // ) //); //return that.DenominatorProvider.CreateMeasurement( // this.ToDouble(this.MeasurementProvider.ReferenceUnit) * this.NumeratorProvider.ReferenceUnit.DefaultsPerUnit / that.ToDouble(that.MeasurementProvider.ReferenceUnit) / that., // new Unit<TThatDenom>( // "", // this.MeasurementProvider.ReferenceUnit.DefaultsPerUnit / that.MeasurementProvider.ReferenceUnit.DefaultsPerUnit, // that.DenominatorProvider // ) //) //.DivideToRatio(this.DenominatorProvider.ReferenceUnit); }
// Ratio unit extensions public static Unit <Ratio <TNumerator, TDenominator> > DivideToRatioUnit <TNumerator, TDenominator>(this Unit <TNumerator> unit1, Unit <TDenominator> unit2) where TNumerator : IMeasurement <TNumerator> where TDenominator : IMeasurement <TDenominator> { Validate.NonNull(unit1, nameof(unit1)); Validate.NonNull(unit2, nameof(unit2)); return(new Unit <Ratio <TNumerator, TDenominator> >( $"{unit1.Symbol}/{unit2.Symbol}", unit1.DefaultsPerUnit / unit2.DefaultsPerUnit, Ratio <TNumerator, TDenominator> .GetProvider(unit1.MeasurementProvider, unit2.MeasurementProvider) )); }
public static Unit <Ratio <TNumerator, TDenominator> > ToRatioUnit <TSelf, TNumerator, TDenominator>(this Unit <TSelf> unit) where TNumerator : IMeasurement <TNumerator> where TDenominator : IMeasurement <TDenominator> where TSelf : Ratio <TSelf, TNumerator, TDenominator> { Validate.NonNull(unit, nameof(unit)); TSelf self = unit.ToMeasurement(); return(new Unit <Ratio <TNumerator, TDenominator> >( unit.Symbol, unit.DefaultsPerUnit, Ratio <TNumerator, TDenominator> .GetProvider(self.NumeratorProvider, self.DenominatorProvider) )); }