blob: e1db41957c84be37a42b1905ff9b2d4011fa312b [file] [log] [blame]
<?xml version="1.0"?>
<!--
Copyright 2005 The Apache Software Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<?xml-stylesheet type="text/xsl" href="./xdoc.xsl"?>
<!-- $Revision$ $Date$ -->
<document url="stat.html">
<properties>
<title>The Commons Math User Guide - Fractions</title>
</properties>
<body>
<section name="9 Fractions">
<subsection name="9.1 Overview" href="overview">
<p>
The fraction packages provides a fraction number type as well as
fraction number formatting.
</p>
</subsection>
<subsection name="9.2 Fraction Numbers" href="fraction">
<p>
<a href="../apidocs/org/apache/commons/math/fraction/Fraction.html">
org.apache.commons.math.fraction.Fraction</a> provides a fraction number
type that forms the basis for the fraction functionality found in
commons-math.
</p>
<p>
To create a fraction number, simply call the constructor passing in two
integer arguments, the first being the numerator of the fraction and the second being the denominator:
<source>Fraction f = new Fraction(1, 3); // 1 / 3</source>
</p>
<p>
Of special note with fraction construction, when a fraction is created it is always reduced to lowest terms.
</p>
<p>
The <code>Fraction</code> class provides many unary and binary
fraction operations. These operations provide the means to add,
subtract, multiple and, divide fractions along with other functions similar to the real number functions found in
<code>java.math.BigDecimal</code>:
<source>Fraction lhs = new Fraction(1, 3);
Fraction rhs = new Fraction(2, 5);
Fraction answer = lhs.add(rhs); // add two fractions
answer = lhs.subtract(rhs); // subtract two fractions
answer = lhs.abs(); // absolute value
answer = lhs.reciprocal(); // reciprocal of lhs</source>
</p>
<p>
Like fraction construction, for each of the fraction functions, the resulting fraction is reduced to lowest terms.
</p>
</subsection>
<subsection name="9.3 Fraction Formatting and Parsing" href="formatting">
<p>
<code>Fraction</code> instances can be converted to and from strings
using the<a href="../apidocs/org/apache/commons/math/fraction/FractionFormat.html">
org.apache.commons.math.fraction.FractionFormat</a> class.
<code>FractionFormat</code> is a <code>java.text.Format</code>
extension and, as such, is used like other formatting objects (e.g.
<code>java.text.SimpleDateFormat</code>):
<source>FractionFormat format = new FractionFormat(); // default format
Fraction f = new Fraction(2, 4);
String s = format.format(f); // s contains "1 / 2", note the reduced fraction</source>
</p>
<p>
To customize the formatting output, one or two
<code>java.text.NumberFormat</code> instances can be used to construct
a <code>FractionFormat</code>. These number formats control the
formatting of the numerator and denominator of the fraction:
<source>NumberFormat nf = NumberFormat.getInstance(Locale.FRANCE);
// create fraction format with custom number format
// when one number format is used, both numerator and
// denominator are formatted the same
FractionFormat format = new FractionFormat(nf);
Fraction f = new Fraction(2000, 3333);
String s = format.format(c); // s contains "2.000 / 3.333"
NumberFormat nf2 = NumberFormat.getInstance(Locale.US);
// create fraction format with custom number formats
format = new FractionFormat(nf, nf2);
s = format.format(f); // s contains "2.000 / 3,333"</source>
</p>
<p>
Formatting's inverse operation, parsing, can also be performed by
<code>FractionFormat</code>. To parse a fraction from a string,
simply call the <code>parse</code> method:
<source>FractionFormat ff = new FractionFormat();
Fraction f = ff.parse("-10 / 21");</source>
</p>
</subsection>
</section>
</body>
</document>