Is there any way to truncate the negative sign when the result returns zero; while using decimal format?
DecimalFormat df = new DecimalFormat("#,##0.0"); df.setRoundingMode(RoundingMode.HALF_UP); formattedValue = df.format("-0.023");
The above code returns -0.0 . Is there any way by which it will return only 0.0? However, I want to retain the negative sign when the result is a negative number.
Because Java uses the IEEE Standard for Floating-Point Arithmetic (IEEE 754) which defines -0.0 and when it should be used. The smallest number representable has no 1 bit in the subnormal significand and is called the positive or negative zero as determined by the sign.
The mystery of negative zero (-0) in Java. Mathematically the number 0 does not have a sign, therefore -0, +0 and 0 are identical. We say that zero is neither positive nor negative.
Indeed zero is neither negative nor a positive number.
To convert negative number to positive number (this is called absolute value), uses Math. abs(). This Math. abs() method is work like this “ number = (number < 0 ? -number : number); ".
I don't think there's a way of doing it just with DecimalFormat
, but this one-liner takes care of the problem:
formattedValue = formattedValue.replaceAll( "^-(?=0(\\.0*)?$)", "");
It removes (replaces with ""
) the minus sign if it's followed by 0-n characters of "0.00000..."
, so this will work for any similar result such as "-0"
, "-0."
or "-0.000000000"
Here's some test code:
public static void main(String[] args) { System.out.println(format(-0.023)); System.out.println(format(12.123)); System.out.println(format(-12.345)); System.out.println(format(-0.123)); System.out.println(format(-1.777)); } public static String format(double number) { DecimalFormat df = new DecimalFormat("#,##0.0"); df.setRoundingMode(RoundingMode.HALF_UP); String formattedValue = df.format(number); formattedValue = formattedValue.replaceAll("^-(?=0(\\.0*)?$)", ""); return formattedValue; }
Output (as expected):
0.0 12.1 -12.3 -0.1 -1.8
I think this would be a workaround to avoid -0.0
. Use following code :
DecimalFormat df = new DecimalFormat("#,##0.0"); df.setRoundingMode(RoundingMode.HALF_UP); df.setNegativePrefix(""); // set negative prefix BLANK String formattedValue = df.format(-0.023); df.setNegativePrefix("-"); // set back to - again System.out.println(formattedValue);
Output :
0.0
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With