]> gitweb.fperrin.net Git - GpsPrune.git/blob - tim/prune/drew/jpeg/Rational.java
Version 4, January 2008
[GpsPrune.git] / tim / prune / drew / jpeg / Rational.java
1 package tim.prune.drew.jpeg;\r
2 \r
3 /**\r
4  * Immutable class for holding a rational number without loss of precision.\r
5  * Based on Drew Noakes' Metadata extractor at http://drewnoakes.com\r
6  */\r
7 public class Rational\r
8 {\r
9         /** Holds the numerator */\r
10         private final int _numerator;\r
11 \r
12         /** Holds the denominator */\r
13         private final int _denominator;\r
14 \r
15         /**\r
16          * Constructor\r
17          * @param inNumerator numerator of fraction (upper number)\r
18          * @param inDenominator denominator of fraction (lower number)\r
19          */\r
20         public Rational(int inNumerator, int inDenominator)\r
21         {\r
22                 // Could throw exception if denominator is zero\r
23                 _numerator = inNumerator;\r
24                 _denominator = inDenominator;\r
25         }\r
26 \r
27 \r
28         /**\r
29          * @return the value of the specified number as a <code>double</code>.\r
30          * This may involve rounding.\r
31          */\r
32         public double doubleValue()\r
33         {\r
34                 if (_denominator == 0) return 0.0;\r
35                 return (double)_numerator / (double)_denominator;\r
36         }\r
37 \r
38         /**\r
39          * @return the value of the specified number as an <code>int</code>.\r
40          * This may involve rounding or truncation.\r
41          */\r
42         public final int intValue()\r
43         {\r
44                 if (_denominator == 0) return 0;\r
45                 return _numerator / _denominator;\r
46         }\r
47 \r
48         /**\r
49          * @return the denominator.\r
50          */\r
51         public final int getDenominator()\r
52         {\r
53                 return _denominator;\r
54         }\r
55 \r
56         /**\r
57          * @return the numerator.\r
58          */\r
59         public final int getNumerator()\r
60         {\r
61                 return _numerator;\r
62         }\r
63 \r
64         /**\r
65          * Checks if this rational number is an Integer, either positive or negative\r
66          * @return true if an integer\r
67          */\r
68         public boolean isInteger()\r
69         {\r
70                 // number is integer if the denominator is 1, or if the remainder is zero\r
71                 return (_denominator == 1\r
72                         || (_denominator != 0 && (_numerator % _denominator == 0)));\r
73         }\r
74 \r
75 \r
76         /**\r
77          * @return a string representation of the object of form <code>numerator/denominator</code>.\r
78          */\r
79         public String toString()\r
80         {\r
81                 return "" + _numerator + "/" + _denominator;\r
82         }\r
83 \r
84 \r
85         /**\r
86          * Compares two <code>Rational</code> instances, returning true if they are equal\r
87          * @param inOther the Rational to compare this instance to.\r
88          * @return true if instances are equal, otherwise false.\r
89          */\r
90         public boolean equals(Rational inOther)\r
91         {\r
92                 // Could also attempt to simplify fractions to lowest common denominator before compare\r
93                 return _numerator == inOther._numerator && _denominator == inOther._denominator;\r
94         }\r
95 }