Class Fraction

• All Implemented Interfaces:
Serializable, Comparable<Fraction>

public final class Fraction
extends Number
implements Comparable<Fraction>

Fraction is a Number implementation that stores fractions accurately.

This class is immutable, and interoperable with most methods that accept a Number.

Note that this class is intended for common use cases, it is int based and thus suffers from various overflow issues. For a BigInteger based equivalent, please see the Commons Math BigFraction class.

Since:
2.0
Serialized Form
• Field Detail

• ZERO

public static final Fraction ZERO
Fraction representation of 0.
• ONE

public static final Fraction ONE
Fraction representation of 1.
• ONE_HALF

public static final Fraction ONE_HALF
Fraction representation of 1/2.
• ONE_THIRD

public static final Fraction ONE_THIRD
Fraction representation of 1/3.
• TWO_THIRDS

public static final Fraction TWO_THIRDS
Fraction representation of 2/3.
• ONE_QUARTER

public static final Fraction ONE_QUARTER
Fraction representation of 1/4.
• TWO_QUARTERS

public static final Fraction TWO_QUARTERS
Fraction representation of 2/4.
• THREE_QUARTERS

public static final Fraction THREE_QUARTERS
Fraction representation of 3/4.
• ONE_FIFTH

public static final Fraction ONE_FIFTH
Fraction representation of 1/5.
• TWO_FIFTHS

public static final Fraction TWO_FIFTHS
Fraction representation of 2/5.
• THREE_FIFTHS

public static final Fraction THREE_FIFTHS
Fraction representation of 3/5.
• FOUR_FIFTHS

public static final Fraction FOUR_FIFTHS
Fraction representation of 4/5.
• Method Detail

• getFraction

public static Fraction getFraction​(int numerator,
int denominator)

Creates a Fraction instance with the 2 parts of a fraction Y/Z.

Any negative signs are resolved to be on the numerator.

Parameters:
numerator - the numerator, for example the three in 'three sevenths'
denominator - the denominator, for example the seven in 'three sevenths'
Returns:
a new fraction instance
Throws:
ArithmeticException - if the denominator is zero or the denominator is negative and the numerator is Integer#MIN_VALUE
• getFraction

public static Fraction getFraction​(int whole,
int numerator,
int denominator)

Creates a Fraction instance with the 3 parts of a fraction X Y/Z.

The negative sign must be passed in on the whole number part.

Parameters:
whole - the whole number, for example the one in 'one and three sevenths'
numerator - the numerator, for example the three in 'one and three sevenths'
denominator - the denominator, for example the seven in 'one and three sevenths'
Returns:
a new fraction instance
Throws:
ArithmeticException - if the denominator is zero
ArithmeticException - if the denominator is negative
ArithmeticException - if the numerator is negative
ArithmeticException - if the resulting numerator exceeds Integer.MAX_VALUE
• getReducedFraction

public static Fraction getReducedFraction​(int numerator,
int denominator)

Creates a reduced Fraction instance with the 2 parts of a fraction Y/Z.

For example, if the input parameters represent 2/4, then the created fraction will be 1/2.

Any negative signs are resolved to be on the numerator.

Parameters:
numerator - the numerator, for example the three in 'three sevenths'
denominator - the denominator, for example the seven in 'three sevenths'
Returns:
a new fraction instance, with the numerator and denominator reduced
Throws:
ArithmeticException - if the denominator is zero
• getFraction

public static Fraction getFraction​(double value)

Creates a Fraction instance from a double value.

This method uses the continued fraction algorithm, computing a maximum of 25 convergents and bounding the denominator by 10,000.

Parameters:
value - the double value to convert
Returns:
a new fraction instance that is close to the value
Throws:
ArithmeticException - if |value| &gt; Integer.MAX_VALUE or value = NaN
ArithmeticException - if the calculated denominator is zero
ArithmeticException - if the algorithm does not converge
• getFraction

public static Fraction getFraction​(String str)

Creates a Fraction from a String.

The formats accepted are:

1. double String containing a dot
2. 'X Y/Z'
3. 'Y/Z'
4. 'X' (a simple whole number)

and a .

Parameters:
str - the string to parse, must not be null
Returns:
the new Fraction instance
Throws:
NullPointerException - if the string is null
NumberFormatException - if the number format is invalid
• getNumerator

public int getNumerator()

Gets the numerator part of the fraction.

This method may return a value greater than the denominator, an improper fraction, such as the seven in 7/4.

Returns:
the numerator fraction part
• getDenominator

public int getDenominator()

Gets the denominator part of the fraction.

Returns:
the denominator fraction part
• getProperNumerator

public int getProperNumerator()

Gets the proper numerator, always positive.

An improper fraction 7/4 can be resolved into a proper one, 1 3/4. This method returns the 3 from the proper fraction.

If the fraction is negative such as -7/4, it can be resolved into -1 3/4, so this method returns the positive proper numerator, 3.

Returns:
the numerator fraction part of a proper fraction, always positive
• getProperWhole

public int getProperWhole()

Gets the proper whole part of the fraction.

An improper fraction 7/4 can be resolved into a proper one, 1 3/4. This method returns the 1 from the proper fraction.

If the fraction is negative such as -7/4, it can be resolved into -1 3/4, so this method returns the positive whole part -1.

Returns:
the whole fraction part of a proper fraction, that includes the sign
• intValue

public int intValue()

Gets the fraction as an int. This returns the whole number part of the fraction.

Specified by:
intValue in class Number
Returns:
the whole number fraction part
• longValue

public long longValue()

Gets the fraction as a long. This returns the whole number part of the fraction.

Specified by:
longValue in class Number
Returns:
the whole number fraction part
• floatValue

public float floatValue()

Gets the fraction as a float. This calculates the fraction as the numerator divided by denominator.

Specified by:
floatValue in class Number
Returns:
the fraction as a float
• doubleValue

public double doubleValue()

Gets the fraction as a double. This calculates the fraction as the numerator divided by denominator.

Specified by:
doubleValue in class Number
Returns:
the fraction as a double
• reduce

public Fraction reduce()

Reduce the fraction to the smallest values for the numerator and denominator, returning the result.

For example, if this fraction represents 2/4, then the result will be 1/2.

Returns:
a new reduced fraction instance, or this if no simplification possible
• invert

public Fraction invert()

Gets a fraction that is the inverse (1/fraction) of this one.

The returned fraction is not reduced.

Returns:
a new fraction instance with the numerator and denominator inverted.
Throws:
ArithmeticException - if the fraction represents zero.
• negate

public Fraction negate()

Gets a fraction that is the negative (-fraction) of this one.

The returned fraction is not reduced.

Returns:
a new fraction instance with the opposite signed numerator
• abs

public Fraction abs()

Gets a fraction that is the positive equivalent of this one.

More precisely: (fraction &gt;= 0 ? this : -fraction)

The returned fraction is not reduced.

Returns:
this if it is positive, or a new positive fraction instance with the opposite signed numerator
• pow

public Fraction pow​(int power)

Gets a fraction that is raised to the passed in power.

The returned fraction is in reduced form.

Parameters:
power - the power to raise the fraction to
Returns:
this if the power is one, ONE if the power is zero (even if the fraction equals ZERO) or a new fraction instance raised to the appropriate power
Throws:
ArithmeticException - if the resulting numerator or denominator exceeds Integer.MAX_VALUE

Adds the value of this fraction to another, returning the result in reduced form. The algorithm follows Knuth, 4.5.1.

Parameters:
fraction - the fraction to add, must not be null
Returns:
a Fraction instance with the resulting values
Throws:
IllegalArgumentException - if the fraction is null
ArithmeticException - if the resulting numerator or denominator exceeds Integer.MAX_VALUE
• subtract

public Fraction subtract​(Fraction fraction)

Subtracts the value of another fraction from the value of this one, returning the result in reduced form.

Parameters:
fraction - the fraction to subtract, must not be null
Returns:
a Fraction instance with the resulting values
Throws:
IllegalArgumentException - if the fraction is null
ArithmeticException - if the resulting numerator or denominator cannot be represented in an int.
• multiplyBy

public Fraction multiplyBy​(Fraction fraction)

Multiplies the value of this fraction by another, returning the result in reduced form.

Parameters:
fraction - the fraction to multiply by, must not be null
Returns:
a Fraction instance with the resulting values
Throws:
NullPointerException - if the fraction is null
ArithmeticException - if the resulting numerator or denominator exceeds Integer.MAX_VALUE
• divideBy

public Fraction divideBy​(Fraction fraction)

Divide the value of this fraction by another.

Parameters:
fraction - the fraction to divide by, must not be null
Returns:
a Fraction instance with the resulting values
Throws:
NullPointerException - if the fraction is null
ArithmeticException - if the fraction to divide by is zero
ArithmeticException - if the resulting numerator or denominator exceeds Integer.MAX_VALUE
• equals

public boolean equals​(Object obj)

Compares this fraction to another object to test if they are equal.

.

To be equal, both values must be equal. Thus 2/4 is not equal to 1/2.

Overrides:
equals in class Object
Parameters:
obj - the reference object with which to compare
Returns:
true if this object is equal
• hashCode

public int hashCode()

Gets a hashCode for the fraction.

Overrides:
hashCode in class Object
Returns:
a hash code value for this object
• compareTo

public int compareTo​(Fraction other)

Compares this object to another based on size.

Note: this class has a natural ordering that is inconsistent with equals, because, for example, equals treats 1/2 and 2/4 as different, whereas compareTo treats them as equal.

Specified by:
compareTo in interface Comparable<Fraction>
Parameters:
other - the object to compare to
Returns:
-1 if this is less, 0 if equal, +1 if greater
Throws:
ClassCastException - if the object is not a Fraction
NullPointerException - if the object is null
• toString

public String toString()

Gets the fraction as a String.

The format used is 'numerator/denominator' always.

Overrides:
toString in class Object
Returns:
a String form of the fraction
• toProperString

public String toProperString()

Gets the fraction as a proper String in the format X Y/Z.

The format used in 'wholeNumber numerator/denominator'. If the whole number is zero it will be omitted. If the numerator is zero, only the whole number is returned.

Returns:
a String form of the fraction