Friday 6 December 2019

java - How to nicely format floating numbers to String without unnecessary decimal 0?



An 64-bit double can represent integer +/- 253 exactly



Given this fact I choose to use a double type as a single type for all my types, since my largest integer is unsigned 32-bit.



But now I have to print these pseudo integers, but the problem is they are also mixed in with actual doubles.




So how do I print these doubles nicely in Java?



I have tried String.format("%f", value), which is close, except I get a lot of trailing zeros for small values.



Here's an example output of of %f




232.00000000
0.18000000000

1237875192.0
4.5800000000
0.00000000
1.23450000


What I want is:




232

0.18
1237875192
4.58
0
1.2345


Sure I can write a function to trim those zeros, but that's lot of performance loss due to String manipulation. Can I do better with another format code?



EDIT




The answers by Tom E. and Jeremy S. are unacceptable as they both arbitrarily rounds to 2 decimal places. Please understand the problem before answering.



EDIT 2



Please note that String.format(format, args...) is locale-dependent (see answers below).


Answer



If the idea is to print integers stored as doubles as if they are integers, and otherwise print the doubles with the minimum necessary precision:



public static String fmt(double d)

{
if(d == (long) d)
return String.format("%d",(long)d);
else
return String.format("%s",d);
}


Produces:




232
0.18
1237875192
4.58
0
1.2345


And does not rely on string manipulation.


No comments:

Post a Comment

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...