Exemplo n.º 1
0
        /// <summary>Creates a quantity with the provided value in the given prefixed unit.</summary>
        /// <param name="value">The value of the created quantity.</param>
        /// <param name="prefix">The prefix of the unit.</param>
        /// <param name="unit">The unit of the created quantity.</param>
        public DimensionfulQuantity(double value, SIPrefix prefix, IUnit unit)
        {
            if (null == unit)
            {
                throw new ArgumentNullException(nameof(unit));
            }

            if (unit is IPrefixedUnit punit)
            {
                _unit = punit.Unit;
                (var newPrefix, var remainingFactor) = SIPrefix.FromMultiplication(prefix, punit.Prefix);
                _prefix = newPrefix;
                _value  = value * remainingFactor;
            }
            else
            {
                _value  = value;
                _prefix = prefix ?? SIPrefix.None;
                _unit   = unit;
            }

            if (_unit is IPrefixedUnit)
            {
                throw new ArgumentException("Nested IPrefixedUnit is not supported");
            }
            if (_unit is IBiasedUnit && _prefix != SIPrefix.None)
            {
                throw new ArgumentException("Biased units must not have a prefix!");
            }
        }
Exemplo n.º 2
0
        /// <summary>Converts this quantity to its numerical value in the given unit, with the given prefix.</summary>
        /// <param name="prefix">The prefix of the unit in which to get the numerical value of this quantity.</param>
        /// <param name="unit">The unit in which to get the numerical value of this quantity.</param>
        /// <returns>Numerical value of this quantity in the provided unit with the provided prefix.</returns>
        public double AsValueIn(SIPrefix prefix, IUnit unit)
        {
            if (double.IsNaN(_value))
            {
                return(_value);
            }
            if (null == unit)
            {
                throw new ArgumentNullException("unit");
            }
            if (null == prefix)
            {
                throw new ArgumentNullException("prefix");
            }
            if (null == _unit)
            {
                throw new InvalidOperationException("This instance is empty");
            }
            if (unit.SIUnit != _unit.SIUnit)
            {
                throw new ArgumentException(string.Format("Provided unit ({0}) is incompatible with this unit ({1})", unit.SIUnit, _unit));
            }

            return(prefix.FromSIUnit(unit.FromSIUnit(AsValueInSIUnits)));
        }
Exemplo n.º 3
0
 public UnitRatioComposite(SIPrefix nominatorPrefix, IUnit nominatorUnit, SIPrefix denominatorPrefix, IUnit denominatorUnit)
 {
     _nominatorPrefix   = nominatorPrefix ?? SIPrefix.None;
     _nominatorUnit     = nominatorUnit ?? throw new ArgumentException(nameof(nominatorUnit));
     _denominatorPrefix = denominatorPrefix ?? SIPrefix.None;
     _denominatorUnit   = denominatorUnit ?? throw new ArgumentException(nameof(denominatorUnit));
 }
Exemplo n.º 4
0
 public static DimensionfulQuantity operator *(DimensionfulQuantity a, DimensionfulQuantity b)
 {
     (var newPrefix, var remainingFactor) = SIPrefix.FromMultiplication(a.Prefix, b.Prefix);
     return(new DimensionfulQuantity(
                remainingFactor * a.AsValueInSIUnits * b.AsValueInSIUnits,
                newPrefix,
                a.Unit.SIUnit * b.Unit.SIUnit));
 }
Exemplo n.º 5
0
        public static DimensionfulQuantity operator /(double a, DimensionfulQuantity b)
        {
            b = b.TreatedAsUnbiasedDifference;

            (var newPrefix, var remainingFactor) = SIPrefix.FromDivision(SIPrefix.None, b.Prefix);

            return(new DimensionfulQuantity(
                       remainingFactor * a / b.AsValueInSIUnits,
                       newPrefix,
                       Dimensionless.Unity.Instance / b.Unit.SIUnit));
        }
Exemplo n.º 6
0
        public static DimensionfulQuantity operator /(DimensionfulQuantity a, DimensionfulQuantity b)
        {
            a = a.TreatedAsUnbiasedDifference;
            b = b.TreatedAsUnbiasedDifference;

            (var newPrefix, var remainingFactor) = SIPrefix.FromDivision(a.Prefix, b.Prefix);

            return(new DimensionfulQuantity(
                       remainingFactor * a.AsValueInSIUnits / b.AsValueInSIUnits,
                       newPrefix,
                       a.Unit.SIUnit / b.Unit.SIUnit));
        }
Exemplo n.º 7
0
        public object Deserialize(object o, Altaxo.Serialization.Xml.IXmlDeserializationInfo info, object parent)
        {
            int count = info.OpenArray("PrefixList");

            var list = new SIPrefix[count];

            for (int i = 0; i < count; ++i)
            {
                list[i] = (SIPrefix)info.GetValue("e", parent);
            }
            info.CloseArray(count);

            return(new SIPrefixList(list));
        }
Exemplo n.º 8
0
        public object Deserialize(object o, Altaxo.Serialization.Xml.IXmlDeserializationInfo info, object parent)
        {
            var exponent = info.GetInt32("Exponent");
            var name     = info.GetString("Name");
            var shortcut = info.GetString("Shortcut");

            if (SIPrefix.TryGetPrefixFromExponent(exponent, out var prefix))
            {
                return(prefix);
            }
            else
            {
                return(new SIPrefix(name, shortcut, exponent));
            }
        }
Exemplo n.º 9
0
        public PrefixedUnit(SIPrefix prefix, IUnit unit)
        {
            if (unit is IPrefixedUnit punit)
            {
                if (punit.Unit is IPrefixedUnit)
                {
                    throw new ArgumentException("Multiple nesting of IPrefixedUnit is not supported", nameof(unit));
                }

                (var newPrefix, var factor) = SIPrefix.FromMultiplication(prefix, punit.Prefix);
                if (1 != factor)
                {
                    throw new ArgumentException(string.Format("Can not combine prefix {0} with prefix {1} to a new prefix without additional factor", prefix.Name, punit.Prefix.Name));
                }

                _unit   = punit.Unit;
                _prefix = newPrefix;
            }
            else
            {
                _prefix = prefix;
                _unit   = unit;
            }
        }
Exemplo n.º 10
0
 /// <summary>Creates a quantity with the provided value in the given prefixed unit.</summary>
 /// <param name="value">The value of the created quantity.</param>
 /// <param name="prefixedUnit">The prefixed unit of the created quanity.</param>
 public DimensionfulQuantity(double value, IPrefixedUnit prefixedUnit)
 {
     _value  = value;
     _prefix = prefixedUnit.Prefix;
     _unit   = prefixedUnit.Unit;
 }
Exemplo n.º 11
0
 /// <summary>Converts this quantity to another quantity in the provided unit, with the provided prefix.</summary>
 /// <param name="prefix">The prefix of the unit to convert the quantity to.</param>
 /// <param name="unit">The unit to convert the quantity to.</param>
 /// <returns>New instance of a quantity in the provided unit with the provided prefix.</returns>
 public DimensionfulQuantity AsQuantityIn(SIPrefix prefix, IUnit unit)
 {
     return(new DimensionfulQuantity(AsValueIn(prefix, unit), prefix, unit));
 }