diff options
| author | Samuel Tardieu <sam@rfc1149.net> | 2012-04-20 22:49:55 +0200 |
|---|---|---|
| committer | Samuel Tardieu <sam@rfc1149.net> | 2012-04-20 23:13:18 +0200 |
| commit | 374232fcad05372d7021393656a05b1dba293ca9 (patch) | |
| tree | f458c0e6e7482697e9d9e565fec828e7fefaed80 /main/src/cgeo | |
| parent | c971abeb7416af7113c73ebc1527c9be938cdc8f (diff) | |
| download | cgeo-374232fcad05372d7021393656a05b1dba293ca9.zip cgeo-374232fcad05372d7021393656a05b1dba293ca9.tar.gz cgeo-374232fcad05372d7021393656a05b1dba293ca9.tar.bz2 | |
Add more tests for getHumanDistance()
Diffstat (limited to 'main/src/cgeo')
| -rw-r--r-- | main/src/cgeo/geocaching/geopoint/HumanDistance.java | 64 |
1 files changed, 34 insertions, 30 deletions
diff --git a/main/src/cgeo/geocaching/geopoint/HumanDistance.java b/main/src/cgeo/geocaching/geopoint/HumanDistance.java index 3c40555..25d1bb7 100644 --- a/main/src/cgeo/geocaching/geopoint/HumanDistance.java +++ b/main/src/cgeo/geocaching/geopoint/HumanDistance.java @@ -2,44 +2,48 @@ package cgeo.geocaching.geopoint; import cgeo.geocaching.Settings; +import org.apache.commons.lang3.tuple.ImmutablePair; + public class HumanDistance { - public static String getHumanDistance(final Float distanceKilometers) { - if (distanceKilometers == null) { - return "?"; - } + public static ImmutablePair<Double, String> scaleUnit(final double distanceKilometers) { + double distance; + String units; if (Settings.isUseMetricUnits()) { - if (distanceKilometers > 100) { - return String.format("%d", Math.round(distanceKilometers)) + " km"; - } else if (distanceKilometers > 10) { - return String.format("%.1f", Double.valueOf(Math.round(distanceKilometers * 10.0) / 10.0)) + " km"; - } else if (distanceKilometers > 1) { - return String.format("%.2f", Double.valueOf(Math.round(distanceKilometers * 100.0) / 100.0)) + " km"; - } else if (distanceKilometers > 0.1) { - return String.format("%d", Math.round(distanceKilometers * 1000.0)) + " m"; - } else if (distanceKilometers > 0.01) { - return String.format("%.1f", Double.valueOf(Math.round(distanceKilometers * 1000.0 * 10.0) / 10.0)) + " m"; + if (distanceKilometers >= 1) { + distance = distanceKilometers; + units = "km"; } else { - return String.format("%.2f", Double.valueOf(Math.round(distanceKilometers * 1000.0 * 100.0) / 100.0)) + " m"; + distance = distanceKilometers * 1000; + units = "m"; } } else { - final float miles = distanceKilometers / IConversion.MILES_TO_KILOMETER; - if (miles > 100) { - return String.format("%d", Math.round(miles)) + " mi"; - } else if (miles > 0.5) { - return String.format("%.1f", Double.valueOf(Math.round(miles * 10.0) / 10.0)) + " mi"; - } else if (miles > 0.1) { - return String.format("%.2f", Double.valueOf(Math.round(miles * 100.0) / 100.0)) + " mi"; - } - - final float feet = miles * 5280; - if (feet >= 100) { - return String.format("%d", Math.round(feet)) + " ft"; - } else if (feet >= 10) { - return String.format("%.1f", Double.valueOf(Math.round(feet * 10.0) / 10.0)) + " ft"; + distance = distanceKilometers / IConversion.MILES_TO_KILOMETER; + if (distance >= 0.1) { + units = "mi"; } else { - return String.format("%.2f", Double.valueOf(Math.round(feet * 100.0) / 100.0)) + " ft"; + distance *= 5280; + units = "ft"; } } + return new ImmutablePair<Double, String>(distance, units); + } + + public static String getHumanDistance(final Float distanceKilometers) { + if (distanceKilometers == null) { + return "?"; + } + + final ImmutablePair<Double, String> scaled = scaleUnit(distanceKilometers); + String formatString; + if (scaled.left >= 100) { + formatString = "%.0f"; + } else if (scaled.left >= 10) { + formatString = "%.1f"; + } else { + formatString = "%.2f"; + } + + return String.format(formatString + " %s", scaled.left, scaled.right); } } |
