Inheritance: ICloneable
コード例 #1
0
        public static Quantity operator -(Quantity arg1, Quantity arg2)
        {
            StandardUnit unit1 = arg1.Unit;
            StandardUnit unit2 = arg2.Unit;
            if (unit1 == null && unit2 != null)
                unit1 = unit2.Clone() as StandardUnit;
            string prefix1 = unit1 == null ? "" : unit1.Prefix;
            string prefix2 = unit2 == null ? "" : unit2.Prefix;
            double value1 = arg1.Value;
            double value2 = arg2.Value;
            if (prefix1 != null)
                value1 *= StandardPrefixes.Multiplier(prefix1);
            if (prefix2 != null)
                value2 *= StandardPrefixes.Multiplier(prefix2);

            double value = value1 - value2;
            if (prefix1 != null)
                value /= StandardPrefixes.Multiplier(prefix1);
            var q = new Quantity(Convert.ToDecimal(value));
            if (unit1 != null )
                q.Unit = unit1.Clone() as StandardUnit;
            return q;
        }
コード例 #2
0
        public ErrorLimit(string value, out string remainder)
        {
            string nextWord = remainder = value.Trim(); //Physical.NextWord(value, out remainder);
            if (nextWord.ToLower().StartsWith("errlmt"))
                nextWord = Physical.NextWord(nextWord, out remainder).Trim();
            if (remainder.StartsWith(Quantity.PLUSMINUS1))
            {
                nextWord = remainder;
                _minusQuantity = new Quantity(Quantity.MINUS + nextWord.Substring(1), out remainder);
                _plusQuantity = new Quantity(nextWord.Substring(1), out remainder);
            }
            else if (remainder.StartsWith(Quantity.PLUSMINUS2))
            {
                nextWord = remainder;
                _minusQuantity = new Quantity(Quantity.MINUS + nextWord.Substring(2), out remainder);
                _plusQuantity = new Quantity(nextWord.Substring(2), out remainder);
            }
            else if (remainder.StartsWith(Quantity.PLUS))
            {
                string plusVal = remainder.Substring(1);
                _plusQuantity = new Quantity(plusVal, out remainder);
                if (remainder.StartsWith(Quantity.MINUS))
                    _minusQuantity = new Quantity(remainder, out remainder);
                else if (remainder.Length > 0 && Char.IsNumber(remainder[0]))
                {
                    throw new Exception(string.Format("Missing sign on the second error limit value. {0}", remainder));
                }
                else
                {
                    _plusQuantity = new Quantity(Quantity.MINUS + plusVal, out remainder);
                }
            }
            else if (remainder.StartsWith(Quantity.MINUS))
            {
                string minusVal = remainder;
                _minusQuantity = new Quantity(minusVal, out remainder);
                if (remainder.StartsWith(Quantity.PLUS))
                    _plusQuantity = new Quantity(remainder.Substring(1), out remainder);
                else if (remainder.Length > 0 && Char.IsNumber(remainder[0]))
                {
                    throw new Exception(string.Format("Missing sign on the second error limit value. {0}", remainder));
                }
                else
                {
                    _plusQuantity = new Quantity(minusVal.Substring(1), out remainder);
                }
            }
            else
            {
                nextWord = remainder;
                _minusQuantity = new Quantity(Quantity.MINUS + nextWord, out remainder);
                _plusQuantity = new Quantity(nextWord, out remainder);
            }

            if (!string.IsNullOrEmpty(remainder) && Physical.IsConfidence(remainder))
            {
                string key = Physical.NextWord(remainder, out remainder);
                _confidence = new Quantity(remainder, out remainder);
            }

            if (!string.IsNullOrEmpty(remainder) && Physical.IsResolution(remainder))
            {
                string key = Physical.NextWord(remainder, out remainder);
                _resolution = new Quantity(remainder, out remainder);
            }

            if (_confidence != null)
                _confidence.ValueChanged += delegate { OnValueChanged(); };
            if (_plusQuantity != null)
                _plusQuantity.ValueChanged += delegate { OnValueChanged(); };
            if (_minusQuantity != null)
                _minusQuantity.ValueChanged += delegate { OnValueChanged(); };
            if (_resolution != null)
                _resolution.ValueChanged += delegate { OnValueChanged(); };
        }
コード例 #3
0
        public QualifiedQuantity(string value, out string remainder)
        {
            if (Char.IsLetter(value[0]))
            {
                string q = Physical.NextWord(value, out remainder);
                if (!Physical.IsQualifier(q))
                    throw new Exception(String.Format("Unknown Qualifier: {0}", q));
                _hasQualifier = Enum.TryParse(q, true, out _qualifier);
            }

            _anyQuantity = new Quantity(value, out remainder);
        }
コード例 #4
0
 private string CalculateRange(double magnitude, string nextWord, int size)
 {
     string remainder;
     _fromQuantity = new Quantity(nextWord.Substring(size), out remainder);
     _toQuantity = _fromQuantity.Clone() as Quantity;
     _fromQuantity.Value = magnitude - _fromQuantity.Value;
     if (_toQuantity != null) _toQuantity.Value = magnitude + _toQuantity.Value;
     return remainder;
 }
コード例 #5
0
        private void CreateRange(string value, out string remainder, double magnitude)
        {
            Quantity qty1;
            Quantity qty2;

            string nextWord = remainder = value.Trim(); //Physical.NextWord(value, out remainder);
            _magnitude = magnitude;

            if (nextWord.ToLower().StartsWith("range"))
                nextWord = Physical.NextWord(remainder, out remainder);
            if (nextWord.ToLower().StartsWith("max"))
            {
                nextWord = Physical.NextWord(remainder, out remainder);
                _toQuantity = new Quantity(remainder, out remainder);
            }
            else if (nextWord.ToLower().StartsWith("min"))
            {
                nextWord = Physical.NextWord(remainder, out remainder);
                _fromQuantity = new Quantity(remainder, out remainder);
            }
            else
            {
                if (nextWord.StartsWith(Quantity.PLUSMINUS1))
                {
                    remainder = CalculateRange(magnitude, nextWord, Quantity.PLUSMINUS1.Length);
                }
                else if (nextWord.StartsWith(Quantity.PLUSMINUS2))
                {
                    remainder = CalculateRange(magnitude, nextWord, Quantity.PLUSMINUS2.Length);
                }
                else
                {
                    _fromQuantity = new UncertainQuantity(remainder, out remainder);
                    string to = Physical.NextWord(remainder, out remainder);
                    _toQuantity = new Quantity(remainder, out remainder);
                }
            }
            if (ErrorLimit.IsErrorLimit(remainder))
                _errorLimit = new ErrorLimit(remainder, out remainder);
        }
コード例 #6
0
 public object Clone()
 {
     var clone = new Quantity();
     clone.Value = Value;
     if (Unit != null)
         clone.Unit = Unit.Clone() as StandardUnit;
     return clone;
 }
コード例 #7
0
 protected bool Equals(Quantity other)
 {
     return this == other;
 }
コード例 #8
0
 public static Quantity Min( Quantity qty1, Quantity qty2 )
 {
     if (qty1 < qty2) return qty1;
     return qty2;
 }
コード例 #9
0
 public static Quantity Max(Quantity qty1, Quantity qty2)
 {
     if (qty1 > qty2) return qty1;
     return qty2;
 }
コード例 #10
0
 protected bool Equals(Quantity other)
 {
     return(this == other);
 }
コード例 #11
0
        public ErrorLimit(string value, out string remainder)
        {
            string nextWord = remainder = value.Trim(); //Physical.NextWord(value, out remainder);

            if (nextWord.ToLower().StartsWith("errlmt"))
            {
                nextWord = Physical.NextWord(nextWord, out remainder).Trim();
            }
            if (remainder.StartsWith(Quantity.PLUSMINUS1))
            {
                nextWord       = remainder;
                _minusQuantity = new Quantity(Quantity.MINUS + nextWord.Substring(1), out remainder);
                _plusQuantity  = new Quantity(nextWord.Substring(1), out remainder);
            }
            else if (remainder.StartsWith(Quantity.PLUSMINUS2))
            {
                nextWord       = remainder;
                _minusQuantity = new Quantity(Quantity.MINUS + nextWord.Substring(2), out remainder);
                _plusQuantity  = new Quantity(nextWord.Substring(2), out remainder);
            }
            else if (remainder.StartsWith(Quantity.PLUS))
            {
                string plusVal = remainder.Substring(1);
                _plusQuantity = new Quantity(plusVal, out remainder);
                if (remainder.StartsWith(Quantity.MINUS))
                {
                    _minusQuantity = new Quantity(remainder, out remainder);
                }
                else if (remainder.Length > 0 && Char.IsNumber(remainder[0]))
                {
                    throw new Exception(string.Format("Missing sign on the second error limit value. {0}", remainder));
                }
                else
                {
                    _plusQuantity = new Quantity(Quantity.MINUS + plusVal, out remainder);
                }
            }
            else if (remainder.StartsWith(Quantity.MINUS))
            {
                string minusVal = remainder;
                _minusQuantity = new Quantity(minusVal, out remainder);
                if (remainder.StartsWith(Quantity.PLUS))
                {
                    _plusQuantity = new Quantity(remainder.Substring(1), out remainder);
                }
                else if (remainder.Length > 0 && Char.IsNumber(remainder[0]))
                {
                    throw new Exception(string.Format("Missing sign on the second error limit value. {0}", remainder));
                }
                else
                {
                    _plusQuantity = new Quantity(minusVal.Substring(1), out remainder);
                }
            }
            else
            {
                nextWord       = remainder;
                _minusQuantity = new Quantity(Quantity.MINUS + nextWord, out remainder);
                _plusQuantity  = new Quantity(nextWord, out remainder);
            }

            if (!string.IsNullOrEmpty(remainder) && Physical.IsConfidence(remainder))
            {
                string key = Physical.NextWord(remainder, out remainder);
                _confidence = new Quantity(remainder, out remainder);
            }

            if (!string.IsNullOrEmpty(remainder) && Physical.IsResolution(remainder))
            {
                string key = Physical.NextWord(remainder, out remainder);
                _resolution = new Quantity(remainder, out remainder);
            }

            if (_confidence != null)
            {
                _confidence.ValueChanged += delegate { OnValueChanged(); }
            }
            ;
            if (_plusQuantity != null)
            {
                _plusQuantity.ValueChanged += delegate { OnValueChanged(); }
            }
            ;
            if (_minusQuantity != null)
            {
                _minusQuantity.ValueChanged += delegate { OnValueChanged(); }
            }
            ;
            if (_resolution != null)
            {
                _resolution.ValueChanged += delegate { OnValueChanged(); }
            }
            ;
        }
コード例 #12
0
 private void ControlsToData()
 {
     if (_quantity == null)
         _quantity = new Quantity(Value);
     else
         _quantity.Value = Decimal.ToDouble(Value);
 }