diff --git a/src/androidTest/java/de/dennisguse/opentracks/util/StringUtilsTest.java b/src/androidTest/java/de/dennisguse/opentracks/util/StringUtilsTest.java index 3042ae018..2c2fc2819 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/util/StringUtilsTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/util/StringUtilsTest.java @@ -199,4 +199,24 @@ public class StringUtilsTest { Assert.assertEquals(-1, parts[1]); Assert.assertEquals(0, parts[2]); } + + @Test + public void testFormatDecimal() { + Assert.assertEquals("0", StringUtils.formatDecimal(0.0, 0)); + Assert.assertEquals("0", StringUtils.formatDecimal(0.1, 0)); + Assert.assertEquals("1", StringUtils.formatDecimal(1.1, 0)); + Assert.assertEquals("10", StringUtils.formatDecimal(10, 0)); + Assert.assertEquals("10", StringUtils.formatDecimal(10.1, 0)); + Assert.assertEquals("0", StringUtils.formatDecimal(-0.1, 0)); + + Assert.assertEquals("0", StringUtils.formatDecimal(0.0, 2)); + Assert.assertEquals("0.1", StringUtils.formatDecimal(0.1, 2)); + Assert.assertEquals("1.1", StringUtils.formatDecimal(1.1, 2)); + Assert.assertEquals("10", StringUtils.formatDecimal(10, 2)); + Assert.assertEquals("10.1", StringUtils.formatDecimal(10.1, 2)); + Assert.assertEquals("10.11", StringUtils.formatDecimal(10.111, 2)); + Assert.assertEquals("-0.1", StringUtils.formatDecimal(-0.1, 2)); + + Assert.assertEquals("1", StringUtils.formatDecimal(0.99, 1)); + } } diff --git a/src/main/java/de/dennisguse/opentracks/util/StringUtils.java b/src/main/java/de/dennisguse/opentracks/util/StringUtils.java index 6d58b7661..7efddaa6a 100644 --- a/src/main/java/de/dennisguse/opentracks/util/StringUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/StringUtils.java @@ -21,6 +21,7 @@ import android.text.TextUtils; import android.text.format.DateUtils; import android.util.Pair; +import java.text.DecimalFormat; import java.text.ParsePosition; import java.text.SimpleDateFormat; import java.util.Date; @@ -124,13 +125,20 @@ public class StringUtils { } } - static String formatDecimal(double value) { + private static String formatDecimal(double value) { return StringUtils.formatDecimal(value, 2); } + /** + * Format a decimal number while removing trailing zeros of the decimal part (if present). + */ static String formatDecimal(double value, int decimalPlaces) { - String result = String.format(Locale.getDefault(), "%1$,." + decimalPlaces + "f", value); - return result.replaceAll("[0]*$", "").replaceAll("\\.$", ""); + if (decimalPlaces < 1) { + return Long.toString(Math.round(value)); + } + + String format = "#." + new String(new char[decimalPlaces]).replace("\0", "#"); + return new DecimalFormat(format).format(value); } /**