Package com.drew.lang
Class Rational
- java.lang.Object
-
- java.lang.Number
-
- com.drew.lang.Rational
-
- All Implemented Interfaces:
java.io.Serializable,java.lang.Comparable<Rational>
public class Rational extends java.lang.Number implements java.lang.Comparable<Rational>, java.io.Serializable
Immutable class for holding a rational number without loss of precision. Provides a familiar representation viatoString()in formnumerator/denominator. Note that any value with a numerator of zero will be treated as zero, even if the denominator is also zero.- See Also:
- Serialized Form
-
-
Constructor Summary
Constructors Constructor Description Rational(long numerator, long denominator)Creates a new instance of Rational.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description bytebyteValue()Returns the value of the specified number as abyte.intcompareTo(Rational that)Compares twoRationalinstances, returning true if they are mathematically equivalent (in consistence withequals(Object)method).doubledoubleValue()Returns the value of the specified number as adouble.booleanequals(Rational other)Indicates whether this instance andotherare numerically equal, even if their representations differ.booleanequals(java.lang.Object obj)Compares twoRationalinstances, returning true if they are mathematically equivalent.booleanequalsExact(Rational other)Indicates whether this instance andotherhave identical Numerator and Denominator.floatfloatValue()Returns the value of the specified number as afloat.longgetDenominator()Returns the denominator.longgetNumerator()Returns the numerator.RationalgetReciprocal()Returns the reciprocal value of this object as a new Rational.RationalgetSimplifiedInstance()Simplifies the representation of thisRationalnumber.inthashCode()intintValue()Returns the value of the specified number as anint.booleanisInteger()Checks if thisRationalnumber is an Integer, either positive or negative.booleanisZero()Checks if either the numerator or denominator are zero.longlongValue()Returns the value of the specified number as along.shortshortValue()Returns the value of the specified number as ashort.java.lang.StringtoSimpleString(boolean allowDecimal)Returns the simplest representation of thisRational's value possible.java.lang.StringtoString()Returns a string representation of the object of formnumerator/denominator.
-
-
-
Method Detail
-
doubleValue
public double doubleValue()
Returns the value of the specified number as adouble. This may involve rounding.- Specified by:
doubleValuein classjava.lang.Number- Returns:
- the numeric value represented by this object after conversion
to type
double.
-
floatValue
public float floatValue()
Returns the value of the specified number as afloat. This may involve rounding.- Specified by:
floatValuein classjava.lang.Number- Returns:
- the numeric value represented by this object after conversion
to type
float.
-
byteValue
public final byte byteValue()
Returns the value of the specified number as abyte. This may involve rounding or truncation. This implementation simply casts the result ofdoubleValue()tobyte.- Overrides:
byteValuein classjava.lang.Number- Returns:
- the numeric value represented by this object after conversion
to type
byte.
-
intValue
public final int intValue()
Returns the value of the specified number as anint. This may involve rounding or truncation. This implementation simply casts the result ofdoubleValue()toint.- Specified by:
intValuein classjava.lang.Number- Returns:
- the numeric value represented by this object after conversion
to type
int.
-
longValue
public final long longValue()
Returns the value of the specified number as along. This may involve rounding or truncation. This implementation simply casts the result ofdoubleValue()tolong.- Specified by:
longValuein classjava.lang.Number- Returns:
- the numeric value represented by this object after conversion
to type
long.
-
shortValue
public final short shortValue()
Returns the value of the specified number as ashort. This may involve rounding or truncation. This implementation simply casts the result ofdoubleValue()toshort.- Overrides:
shortValuein classjava.lang.Number- Returns:
- the numeric value represented by this object after conversion
to type
short.
-
getDenominator
public final long getDenominator()
Returns the denominator.
-
getNumerator
public final long getNumerator()
Returns the numerator.
-
getReciprocal
public Rational getReciprocal()
Returns the reciprocal value of this object as a new Rational.- Returns:
- the reciprocal in a new object
-
isInteger
public boolean isInteger()
Checks if thisRationalnumber is an Integer, either positive or negative.
-
isZero
public boolean isZero()
Checks if either the numerator or denominator are zero.
-
toString
public java.lang.String toString()
Returns a string representation of the object of formnumerator/denominator.- Overrides:
toStringin classjava.lang.Object- Returns:
- a string representation of the object.
-
toSimpleString
public java.lang.String toSimpleString(boolean allowDecimal)
Returns the simplest representation of thisRational's value possible.
-
compareTo
public int compareTo(Rational that)
Compares twoRationalinstances, returning true if they are mathematically equivalent (in consistence withequals(Object)method).- Specified by:
compareToin interfacejava.lang.Comparable<Rational>- Parameters:
that- theRationalto compare this instance to.- Returns:
- the value
0if thisRationalis equal to the argumentRationalmathematically; a value less than0if thisRationalis less than the argumentRational; and a value greater than0if thisRationalis greater than the argumentRational.
-
equals
public boolean equals(Rational other)
Indicates whether this instance andotherare numerically equal, even if their representations differ. For example, 1/2 is equal to 10/20 by this method. Similarly, 1/0 is equal to 100/0 by this method. To test equal representations, use EqualsExact.- Parameters:
other- The rational value to compare with
-
equalsExact
public boolean equalsExact(Rational other)
Indicates whether this instance andotherhave identical Numerator and Denominator.For example, 1/2 is not equal to 10/20 by this method. Similarly, 1/0 is not equal to 100/0 by this method. To test numerically equivalence, use Equals(Rational).
- Parameters:
other- The rational value to compare with
-
equals
public boolean equals(java.lang.Object obj)
Compares twoRationalinstances, returning true if they are mathematically equivalent.
-
hashCode
public int hashCode()
- Overrides:
hashCodein classjava.lang.Object
-
getSimplifiedInstance
public Rational getSimplifiedInstance()
Simplifies the representation of this
Rationalnumber.For example, 5/10 simplifies to 1/2 because both Numerator and Denominator share a common factor of 5.
Uses the Euclidean Algorithm to find the greatest common divisor.
- Returns:
- A simplified instance if one exists, otherwise a copy of the original value.
-
-