Exemplo n.º 1
0
        /// <summary>
        /// Tries to convert each axis of the metric of the quantity once.
        /// </summary>
        /// <returns>true if a change has been made</returns>
        private bool canonicalize(ref Quantity quantity)
        {
            List <Metric.Axis> axes  = new List <Metric.Axis>();
            Exponential        value = quantity.Value;
            bool modified            = false;

            foreach (Metric.Axis axis in quantity.Metric.Axes)
            {
                Conversion conversion = Find(axis.Unit);
                if (conversion != null)
                {
                    Quantity part = conversion.Convert(1);
                    part.Metric = part.Metric.MultiplyExponents(axis.Exponent);
                    part.Value  = Exponential.Power(part.Value, axis.Exponent);
                    axes.AddRange(part.Metric.Axes);
                    value   *= part.Value;
                    modified = true;
                }
                else
                {
                    axes.Add(Metric.Axis.CopyOf(axis));
                }
            }

            if (modified)
            {
                quantity = new Quantity(value, new Metric(axes));
            }

            return(modified);
        }
Exemplo n.º 2
0
        public Quantity Convert(Quantity quantity, Conversion conversion)
        {
            Quantity baseq = quantity.UnPrefixed();
            if (!baseq.Metric.Equals(conversion.To))
                throw new InvalidCastException(string.Format("Quantity {0} cannot be converted to {1}", quantity, conversion.To));

            Quantity output = conversion.Convert(baseq.Value);
            return output;
        }
Exemplo n.º 3
0
        public Quantity Convert(Quantity quantity, Conversion conversion)
        {
            Quantity baseq = quantity.UnPrefixed();

            if (!baseq.Metric.Equals(conversion.To))
            {
                throw new InvalidCastException(string.Format("Quantity {0} cannot be converted to {1}", quantity, conversion.To));
            }

            Quantity output = conversion.Convert(baseq.Value);

            return(output);
        }