// This software is released into the Public Domain. See copying.txt for details. package org.openstreetmap.osmosis.core.util; /** * Converts a double coordinate value into an equivalent integer with fixed * precision. * * @author Brett Henderson */ public final class FixedPrecisionCoordinateConvertor { private static final int PRECISION = 7; private static final int MULTIPLICATION_FACTOR = calculateMultiplicationFactor(); /** * This class cannot be instantiated. */ private FixedPrecisionCoordinateConvertor() { // Do nothing. } /** * Generates the multiplication factor that the double coordinate must be * multiplied by to turn it into a fixed precision integer. * * @return The double to fixed multiplication factor. */ private static int calculateMultiplicationFactor() { int result; result = 1; for (int i = 0; i < PRECISION; i++) { result *= 10; } return result; } /** * Converts the requested coordinate from double to fixed precision. * * @param coordinate * The double coordinate value. * @return The fixed coordinate value. */ public static int convertToFixed(double coordinate) { int result; result = (int) Math.round(coordinate * MULTIPLICATION_FACTOR); return result; } /** * Converts the requested coordinate from fixed to double precision. * * @param coordinate * The fixed coordinate value. * @return The double coordinate value. */ public static double convertToDouble(int coordinate) { double result; result = ((double) coordinate) / MULTIPLICATION_FACTOR; return result; } }