Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Negative sign in case of zero in java

Tags:

java

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.

like image 369
Pravat Avatar asked Aug 13 '12 06:08

Pravat


People also ask

Does Java have negative zero?

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.

How do you write a negative zero in Java?

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.

Is 0 negative or positive in Java?

Indeed zero is neither negative nor a positive number.

How do you stop a negative number in Java?

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); ".


2 Answers

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 
like image 127
Bohemian Avatar answered Oct 27 '22 02:10

Bohemian


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 
like image 30
Nandkumar Tekale Avatar answered Oct 27 '22 02:10

Nandkumar Tekale