Fixed StringUtils.formatDecimal to work with decimals of 0.

This commit is contained in:
Dennis Guse
2019-10-30 23:02:02 +01:00
parent 419279fe5e
commit 5483212b06
2 changed files with 31 additions and 3 deletions
@@ -199,4 +199,24 @@ public class StringUtilsTest {
Assert.assertEquals(-1, parts[1]); Assert.assertEquals(-1, parts[1]);
Assert.assertEquals(0, parts[2]); 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));
}
} }
@@ -21,6 +21,7 @@ import android.text.TextUtils;
import android.text.format.DateUtils; import android.text.format.DateUtils;
import android.util.Pair; import android.util.Pair;
import java.text.DecimalFormat;
import java.text.ParsePosition; import java.text.ParsePosition;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; 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); 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) { static String formatDecimal(double value, int decimalPlaces) {
String result = String.format(Locale.getDefault(), "%1$,." + decimalPlaces + "f", value); if (decimalPlaces < 1) {
return result.replaceAll("[0]*$", "").replaceAll("\\.$", ""); return Long.toString(Math.round(value));
}
String format = "#." + new String(new char[decimalPlaces]).replace("\0", "#");
return new DecimalFormat(format).format(value);
} }
/** /**