示例#1
0
        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)
                       ));
        }