HiveBrain v1.2.0
Get Started
← Back to all entries
snippetjavaCritical

How to nicely format floating numbers to string without unnecessary decimal 0's

Submitted by: @import:stackoverflow-api··
0
Viewed 0 times
numbershowfloatingstringwithoutdecimalnicelyformatunnecessary

Problem

A 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 an unsigned 32-bit number.

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 other format code?

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

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

Solution

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.

Code Snippets

public static String fmt(double d)
{
    if(d == (long) d)
        return String.format("%d",(long)d);
    else
        return String.format("%s",d);
}
232
0.18
1237875192
4.58
0
1.2345

Context

Stack Overflow Q#703396, score: 457

Revisions (0)

No revisions yet.