]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - tim/prune/drew/jpeg/Rational.java
Version 2, March 2007
[GpsPrune.git] / tim / prune / drew / jpeg / Rational.java
diff --git a/tim/prune/drew/jpeg/Rational.java b/tim/prune/drew/jpeg/Rational.java
new file mode 100644 (file)
index 0000000..78bd72b
--- /dev/null
@@ -0,0 +1,94 @@
+package tim.prune.drew.jpeg;\r
+\r
+/**\r
+ * Immutable class for holding a rational number without loss of precision.\r
+ * Based on Drew Noakes' Metadata extractor at http://drewnoakes.com\r
+ */\r
+public class Rational\r
+{\r
+       /** Holds the numerator */\r
+       private final int _numerator;\r
+\r
+       /** Holds the denominator */\r
+       private final int _denominator;\r
+\r
+       /**\r
+        * Constructor\r
+        * @param inNumerator numerator of fraction (upper number)\r
+        * @param inDenominator denominator of fraction (lower number)\r
+        */\r
+       public Rational(int inNumerator, int inDenominator)\r
+       {\r
+               // Could throw exception if denominator is zero\r
+               _numerator = inNumerator;\r
+               _denominator = inDenominator;\r
+       }\r
+\r
+\r
+       /**\r
+        * @return the value of the specified number as a <code>double</code>.\r
+        * This may involve rounding.\r
+        */\r
+       public double doubleValue()\r
+       {\r
+               if (_denominator == 0) return 0.0;\r
+               return (double)_numerator / (double)_denominator;\r
+       }\r
+\r
+       /**\r
+        * @return the value of the specified number as an <code>int</code>.\r
+        * This may involve rounding or truncation.\r
+        */\r
+       public final int intValue()\r
+       {\r
+               if (_denominator == 0) return 0;\r
+               return _numerator / _denominator;\r
+       }\r
+\r
+       /**\r
+        * @return the denominator.\r
+        */\r
+       public final int getDenominator()\r
+       {\r
+               return _denominator;\r
+       }\r
+\r
+       /**\r
+        * @return the numerator.\r
+        */\r
+       public final int getNumerator()\r
+       {\r
+               return _numerator;\r
+       }\r
+\r
+       /**\r
+        * Checks if this rational number is an Integer, either positive or negative.\r
+        */\r
+       public boolean isInteger()\r
+       {\r
+               // number is integer if the denominator is 1, or if the remainder is zero\r
+               return (_denominator == 1\r
+                       || (_denominator != 0 && (_numerator % _denominator == 0)));\r
+       }\r
+\r
+\r
+       /**\r
+        * @return a string representation of the object of form <code>numerator/denominator</code>.\r
+        */\r
+       public String toString()\r
+       {\r
+               return "" + _numerator + "/" + _denominator;\r
+       }\r
+\r
+\r
+       /**\r
+        * Compares two <code>Rational</code> instances, returning true if they are equal\r
+        * @param inOther the Rational to compare this instance to.\r
+        * @return true if instances are equal, otherwise false.\r
+        */\r
+       public boolean equals(Rational inOther)\r
+       {\r
+               // Could also attempt to simplify fractions to lowest common denominator before compare\r
+               return _numerator == inOther._numerator && _denominator == inOther._denominator;\r
+       }\r
+}
\ No newline at end of file