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 byte
byteValue()
Returns the value of the specified number as abyte
.int
compareTo(Rational that)
Compares twoRational
instances, returning true if they are mathematically equivalent (in consistence withequals(Object)
method).double
doubleValue()
Returns the value of the specified number as adouble
.boolean
equals(Rational other)
Indicates whether this instance andother
are numerically equal, even if their representations differ.boolean
equals(java.lang.Object obj)
Compares twoRational
instances, returning true if they are mathematically equivalent.boolean
equalsExact(Rational other)
Indicates whether this instance andother
have identical Numerator and Denominator.float
floatValue()
Returns the value of the specified number as afloat
.long
getDenominator()
Returns the denominator.long
getNumerator()
Returns the numerator.Rational
getReciprocal()
Returns the reciprocal value of this object as a new Rational.Rational
getSimplifiedInstance()
Simplifies the representation of thisRational
number.int
hashCode()
int
intValue()
Returns the value of the specified number as anint
.boolean
isInteger()
Checks if thisRational
number is an Integer, either positive or negative.boolean
isZero()
Checks if either the numerator or denominator are zero.long
longValue()
Returns the value of the specified number as along
.short
shortValue()
Returns the value of the specified number as ashort
.java.lang.String
toSimpleString(boolean allowDecimal)
Returns the simplest representation of thisRational
's value possible.java.lang.String
toString()
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:
doubleValue
in 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:
floatValue
in 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:
byteValue
in 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:
intValue
in 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:
longValue
in 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:
shortValue
in 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 thisRational
number 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:
toString
in 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 twoRational
instances, returning true if they are mathematically equivalent (in consistence withequals(Object)
method).- Specified by:
compareTo
in interfacejava.lang.Comparable<Rational>
- Parameters:
that
- theRational
to compare this instance to.- Returns:
- the value
0
if thisRational
is equal to the argumentRational
mathematically; a value less than0
if thisRational
is less than the argumentRational
; and a value greater than0
if thisRational
is greater than the argumentRational
.
-
equals
public boolean equals(Rational other)
Indicates whether this instance andother
are 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 andother
have 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 twoRational
instances, returning true if they are mathematically equivalent.
-
hashCode
public int hashCode()
- Overrides:
hashCode
in classjava.lang.Object
-
getSimplifiedInstance
public Rational getSimplifiedInstance()
Simplifies the representation of this
Rational
number.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.
-
-