aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo
diff options
context:
space:
mode:
authorSamuel Tardieu <sam@rfc1149.net>2012-04-20 22:49:55 +0200
committerSamuel Tardieu <sam@rfc1149.net>2012-04-20 23:13:18 +0200
commit374232fcad05372d7021393656a05b1dba293ca9 (patch)
treef458c0e6e7482697e9d9e565fec828e7fefaed80 /main/src/cgeo
parentc971abeb7416af7113c73ebc1527c9be938cdc8f (diff)
downloadcgeo-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.java64
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);
}
}