/// <summary>
 /// Compares two
 /// <see cref="Rational"/>
 /// instances, returning true if they are mathematically
 /// equivalent.
 /// </summary>
 /// <param name="obj">
 /// the
 /// <see cref="Rational"/>
 /// to compare this instance to.
 /// </param>
 /// <returns>
 /// true if instances are mathematically equivalent, otherwise false.  Will also
 /// return false if <code>obj</code> is not an instance of
 /// <see cref="Rational"/>
 /// .
 /// </returns>
 public override bool Equals(object obj)
 {
     if (obj == null || !(obj is Com.Drew.Lang.Rational))
     {
         return(false);
     }
     Com.Drew.Lang.Rational that = (Com.Drew.Lang.Rational)obj;
     return(this.DoubleValue() == that.DoubleValue());
 }
 public virtual string ToSimpleString(bool allowDecimal)
 {
     if (_denominator == 0 && _numerator != 0)
     {
         return(ToString());
     }
     else
     {
         if (IsInteger())
         {
             return(Sharpen.Extensions.ToString(IntValue()));
         }
         else
         {
             if (_numerator != 1 && _denominator % _numerator == 0)
             {
                 // common factor between denominator and numerator
                 long newDenominator = _denominator / _numerator;
                 return(new Com.Drew.Lang.Rational(1, newDenominator).ToSimpleString(allowDecimal));
             }
             else
             {
                 Com.Drew.Lang.Rational simplifiedInstance = GetSimplifiedInstance();
                 if (allowDecimal)
                 {
                     string doubleString = simplifiedInstance.DoubleValue().ToString();
                     if (doubleString.Length < 5)
                     {
                         return(doubleString);
                     }
                 }
                 return(simplifiedInstance.ToString());
             }
         }
     }
 }