Fraction

# org.apache.commons.lang3.math.Fraction Example

Hi folks, Today we are going to talk about `Fractions` from `org.apache.commons.lang3.math` package. This api provides us with capabilities to handle operations on fractions. I wrote a nice and simple java program demonstrating the application of this api. If you are already a java programmer and if you have tried dividing two numbers with different datatypes, you would have encountered implicit conversion of return value which results in ambiguous results, this class is highly effective in addressing those kinds of issues since you represent the fraction as a single unit.Enough said, lets have fun with Fractions !!!

```<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.3.2</version>
```

Here is an example on how to go about using this Library.

## 1. Example

FractionExample.java

```package com.javacodegeek;

import org.apache.commons.lang3.math.Fraction;

public class FractionExample {

public static void main(String[] args)throws Exception {
operations();
comparisons();
conversions();
extractions();
simpletransformations();
}
public static void operations(){
System.out.println("OPERATIONS");

Fraction fraA = Fraction.FOUR_FIFTHS;
System.out.println("fraA="+fraA);
Fraction fraB = Fraction.getFraction(6, 5);
System.out.println("fraB= "+fraB);

Fraction AxB=fraA.multiplyBy(fraB);
System.out.println("MultiplyBy: fraAxfraB = "+AxB);

Fraction Apow2 = fraA.pow(2);
System.out.println("A power 2: "+Apow2);

Fraction AminusB = fraA.subtract(fraB);
System.out.println("A-B: "+AminusB);
}
public static void comparisons(){
System.out.println("\nCOMPARISONS");

Fraction fraA = Fraction.FOUR_FIFTHS;
Fraction fraB = Fraction.getFraction(6, 5);

System.out.println("fraA="+fraA);
System.out.println("fraB= "+fraB);

int res = fraA.compareTo(fraB);
System.out.println("fraA.compareTo(fraB): "+res);

boolean boolres = fraA.equals(fraB);
System.out.println("fraA.equals(fraB): "+boolres);
}
public static void conversions(){
System.out.println("\nCONVERSIONS");

Fraction fraA = Fraction.FOUR_FIFTHS;
System.out.println("fraA: "+ fraA);

float fraAfloat = fraA.floatValue();
System.out.println("fraA.floatValue() : "+fraAfloat);

float fraAint = fraA.intValue();
System.out.println("fraA.intValue(): "+fraAint);

Fraction frastrMixed = Fraction.getFraction("10 5/7");
System.out.println("Fraction.getFraction(\"10 5/7\"): "+frastrMixed);

Fraction frastr = Fraction.getFraction("5/7");
System.out.println("Fraction.getFraction(\"5/7\"): "+frastr);

Fraction fraND = Fraction.getFraction(6,7);
System.out.println("Fraction.getFraction(6,7): "+fraND);

Fraction fraWND = Fraction.getFraction(7,8,9);
System.out.println("Fraction.getFraction(7,8,9): "+fraWND);
}
public static void extractions(){
System.out.println("\nEXTRACTIONS");

Fraction fraA = Fraction.FOUR_FIFTHS;
System.out.println("fraA: "+fraA);

System.out.println("getDenominator(): "+fraA.getDenominator());

System.out.println("getNumerator(): "+ fraA.getNumerator());

System.out.println("getProperNumerator(): "+fraA.getProperNumerator());

System.out.println("getProperWhole(): "+fraA.getProperWhole());

System.out.println("toProperString(): "+fraA.toProperString());
}
public static void simpletransformations(){
System.out.println("\nSIMPLETRANSFORAMTIONS");

Fraction fraA = Fraction.FOUR_FIFTHS;
System.out.println("fraA: "+fraA);

System.out.println("fraA.negate().abs(): "+fraA.negate().abs());

System.out.println("fraA.negate(): "+fraA.negate());

System.out.println("fraA.invert(): "+fraA.invert());

System.out.println("fraA.reduce(): "+fraA.reduce());

System.out.println("fraA.getReducedFraction(20, 30): "+fraA.getReducedFraction(20, 30));
}
}

```

Output

```OPERATIONS
fraA=4/5
fraB= 6/5
MultiplyBy: fraAxfraB = 24/25
A power 2: 16/25
A divide by B: 2/3
A-B: -2/5

COMPARISONS
fraA=4/5
fraB= 6/5
fraA.compareTo(fraB): -1
fraA.equals(fraB): false

CONVERSIONS
fraA: 4/5
fraA.doubleValue() : 0.8
fraA.floatValue() : 0.8
fraA.intValue(): 0.0
Fraction.getFraction("10 5/7"): 75/7
Fraction.getFraction("5/7"): 5/7
Fraction.getFraction(44.44): 1111/25
Fraction.getFraction(6,7): 6/7
Fraction.getFraction(7,8,9): 71/9

EXTRACTIONS
fraA: 4/5
getDenominator(): 5
getNumerator(): 4
getProperNumerator(): 4
getProperWhole(): 0
toProperString(): 4/5

SIMPLETRANSFORAMTIONS
fraA: 4/5
fraA.negate().abs(): 4/5
fraA.negate(): -4/5
fraA.invert(): 5/4
fraA.reduce(): 4/5
fraA.getReducedFraction(20, 30): 2/3
```

## 2. Static constants representing fractions that you can use.

• `static Fraction FOUR_FIFTHS` is 4/5
• `static Fraction MINUS_ONE` is -1 / 1
• `static Fraction ONE` is 1
• `static Fraction ONE_FIFTH` is 1/5
• `static Fraction ONE_HALF` is 1/2
• `static Fraction ONE_QUARTER` is 1/4
• `static Fraction ONE_THIRD` is 1/3
• `static Fraction THREE_FIFTHS` is 3/5
• `static Fraction THREE_QUARTERS` is 3/4
• `static Fraction TWO` is 2/1
• `static Fraction TWO_FIFTHS` is 2/5
• `static Fraction TWO_QUARTERS` is 2/4
• `static Fraction TWO_THIRDS` is 2/3
• `static Fraction ZERO` is 0

## 3. Methods associated with fractions are characterized into 5 sections for the sake of explanation.

1. Operations
2. Comparisons
3. Conversions
4. Extractions
5. Simpletransformations

## 4. Operations

This category deals with addition,multiplication, power,division,subractions and hence the following methods.
the `FractionExample.operations()` method in the above code demonstrates on how to go about using these methods in your program.

• `Fraction add(Fraction fraction)` Adds the value of this fraction to another, returning the result in reduced form.
• `Fraction divideBy(Fraction fraction)` Divide the value of this fraction by another.
• `Fraction multiplyBy(Fraction fraction)` Multiplies the value of this fraction by another, returning the result in reduced form.
• `Fraction pow(int power)` Gets a fraction that is raised to the passed in power.
• `Fraction subtract(Fraction fraction)` Subtracts the value of another fraction from the value of this one, returning the result in reduced form.

## 5. Comparisons

This category deals with comparing fractions, hence the following methods.
the `FractionExample.comparisons()` method in the above code demonstrates on how to go about using these methods in your program.

• `int compareTo(Fraction other)` Compares this object to another based on size.
• `boolean equals(Object obj)` Compares this fraction to another object to test if they are equal.

## 6. Conversions

This category deals with converting numbers,strings into fractions and hence the following methods.
the `FractionExample.conversions()` method in the above code demonstrates on how to go about using these methods in your program.

The one method that catches my eye is getFraction(String str) method. because it can not only accept simple fraction like 4/5 but also mixed fraction representation like 10 4/5 which is really handy and ofcourse the fraction object will hold the fraction as is and not reduce it, for that you have another method (reduce()).

Another interesting method is getFraction(double value) which accepts a double and conveniently returns a fraction representation.neat.

• `double doubleValue()` Gets the fraction as a double.
• `float floatValue()` Gets the fraction as a float.
• `static Fraction getFraction(double value)` Creates a Fraction instance from a double value.
• `static Fraction getFraction(int numerator, int denominator)` Creates a Fraction instance with the 2 parts of a fraction Y/Z.
• `static Fraction getFraction(int whole, int numerator, int denominator)` Creates a Fraction instance with the 3 parts of a fraction X Y/Z.
• `static Fraction getFraction(String str)` Creates a Fraction from a String.
• `int intValue()` Gets the fraction as an int.
• `long longValue()` Gets the fraction as a long.

## 7. Extractions

This category deals with extracting numbers from a given fraction and hence the following methods.
the `FractionExample.extractions()` method in the above code demonstrates on how to go about using these methods in your program.

• `int getNumerator()` returns the numerator.
• `int getDenominator()`  returns the denominator.
• `int getProperNumerator()` returns the proper numerator, always positive.
• `int getProperWhole()` returns the proper whole part of the fraction.
• `String toProperString()` returns the fraction as a proper String in the format X Y/Z(mixed fraction).

## 8. Simpletransformations

This category deals with transforming a given fraction and hence the following methods.
the `FractionExample.simpletransformations()` method in the above code demonstrates on how to go about using these methods in your program.

• `static Fraction getReducedFraction(int numerator, int denominator)` Creates a reduced Fraction instance with the 2 parts of a fraction Y/Z.
• `Fraction invert()` Gets a fraction that is the inverse (1/fraction) of this one.
• `Fraction negate()` Gets a fraction that is the negative (-fraction) of this one.
• `Fraction pow(int power)` Gets a fraction that is raised to the passed in power.
• `Fraction reduce()` Reduce the fraction to the smallest values for the numerator and denominator, returning the result.

## Conclusion

`Fraction` class is a simple and elegant api. This can really save a lot of time for programmers who are working with calculations pertaining to fractions.

## Want to know how to develop your skillset to become a Java Rockstar? ### Arun Kumaraswamy

Arun Kumaraswamy is a Java-Oracle Developer. His technical skills span a very wide range of technologies across networks, operating systems and web servers. He specializes in programming, PL/SQL and Linux. He also conducts penetration testing for websites. In short, he is the definition of a geek. He likes watching cricket in his spare time. He has some certifications like C|EH, CDAC-DITISS, SCJP and RHCE.
Subscribe
Notify of This site uses Akismet to reduce spam. Learn how your comment data is processed.