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; }
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(); }; }
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); }
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; }
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); }
public object Clone() { var clone = new Quantity(); clone.Value = Value; if (Unit != null) clone.Unit = Unit.Clone() as StandardUnit; return clone; }
protected bool Equals(Quantity other) { return this == other; }
public static Quantity Min( Quantity qty1, Quantity qty2 ) { if (qty1 < qty2) return qty1; return qty2; }
public static Quantity Max(Quantity qty1, Quantity qty2) { if (qty1 > qty2) return qty1; return qty2; }
protected bool Equals(Quantity other) { return(this == other); }
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(); } } ; }
private void ControlsToData() { if (_quantity == null) _quantity = new Quantity(Value); else _quantity.Value = Decimal.ToDouble(Value); }