From 5483212b061fa0f6623f9d864a877c160d75e7af Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Wed, 30 Oct 2019 23:02:02 +0100 Subject: [PATCH] Fixed StringUtils.formatDecimal to work with decimals of 0. --- .../opentracks/util/StringUtilsTest.java | 20 +++++++++++++++++++ .../opentracks/util/StringUtils.java | 14 ++++++++++--- 2 files changed, 31 insertions(+), 3 deletions(-) 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); } /**