[java] Printing a double to 2 decimal places in Java 1.4

Recommended Posts

Hi, Can someone give me an example of printing a double to 2 decimal places in java - I am trying to understand how this DecimalFormat works and I don't seem to be getting it right. From the API I know this function exists but what is FieldPosition and what parametes does it take ? public StringBuffer format(double number, StringBuffer result, FieldPosition fieldPosition) I am on the right track right that I have to use this function to do this ? Thanks

Share on other sites
Apart from using the printf function...

float f = 2.3567f;System.out.printf("%.2f", f);

(Or something like that, my C is rusty and I never did that with Java before, only know that it is available from 1.5+)

...You can create a number formatter instance using a pattern ("#.##", to be more specific).

Son Of Cain

Share on other sites
Here's the 1.4 way.

import java.text.*;public class Test{    public static void main(String[] args)    {        double d = 1.234567;        DecimalFormat df = new DecimalFormat("#.##");        System.out.print(df.format(d));    }}

Share on other sites
I find this easiest
double d = 12.345678;int r = (int)(d * 100);double f = r / 100.0;System.out.println(f);

Share on other sites
capn_midnight's method will fail if one decimal place is enough for a lossless back n forth (print'n'parse) transformation.

bsh % double d = 5;
bsh % int r = (int)(d * 100);
bsh % double f = r / 100.0;
bsh % print(f);
5.0

duh :)

bsh % double d=5;
bsh % int r=(int)Math.round(d*100);
bsh % print((r/100)+"."+(r%100<

Share on other sites
My post has been capped o_O

bsh % double d=5;
bsh % int r=(int)Math.round(d*100);
bsh % print((r/100)+"."+(r%100<

Share on other sites
Geez. This forum is the worst.

http://phpfi.com/115271

ffs

Share on other sites
that's why you should A) login, and B) learn HTML character entities.

Share on other sites
Its not my fault that this forum software is badly written.

Oh and I know about html entities... thanks for your worries. Its just... I've never seen a forum, which cant handle the escaping by itself. Its very basic stuff after all.

And login... I dont really feel like registering here. This half-dead subforum wont justify the trouble :P

Share on other sites
Quote:
 Original post by Anonymous PosterIts not my fault that this forum software is badly written.

If you think this forum software is badly written, you haven't seen this yet.

Share on other sites
Ok dude, do not take the time to register. We appreciate your visit, and thanks for sharing those amazing lines of bean shell script.

Share on other sites
I don't understand why people don't register.

Share on other sites

Low activity.

>We appreciate your visit, and thanks for sharing those amazing lines of bean shell script.

Its a valid solution for the problem. There is no reason for getting sarcastic.

>I don't understand why people don't register.

Its not required for answering questions. Well, dont worry about it. I wont come back.

Share on other sites
.append((Math.rint(a * 100) / 100);

should work well (kinda).

DecimalFormat is supposed to be used in internationalization, not as a simple dirty method for programmers.

of course you can also do
if(a > 0){
a += e;
} else {
a -= e;
}

.print((double) ((int) (a * 100)) / 100D);

Share on other sites
No, I'm not crazy, but please replace this:
if(a > 0){a += e;} else {a -= e;}

With this:
a = (a > 0) ? a += e ; a -= e;

;)

Son Of Cain

Share on other sites
Quote:
 Original post by Son of CainWith this:a = (a > 0) ? a += e ; a -= e;

That doesn't compile, I think you meant this?
a = (a > 0) ? a += e : (a -= e);

But even that can be rewritten into this:
a += (a > 0) ? e : (-e);

Share on other sites
Yes, yes, my typo, and your version is even better optimized! =D

Share on other sites
Quote:
 Original post by Son of CainYes, yes, my typo, and your version is even better optimized! =D

If by better optimized, you mean more difficult to read, then yes.
What is with programmers' facinations with making code so obfuscated? I've yet to see anything that makes it any faster.
Isn't the saying "Premature optimization is the root of all evil"?

Share on other sites
In this particular case, it has to do with the way bytecodes are generated for the expression (don't ask me the details, I've just been told the ternary operator translates into better bytecode than if/else to attribute value to a variable). And also, I don't find it hard to read - any average programmer knows about the ternary conditional operator, there's nothing fancy or hacky about it...

Perhaps the term "optimization" may be exagerated alright, but definetely, I'd prefer the one line version rather than the five lines one. Seems like cleaner and clearer code to me.

Either way, my personal opinion. Some might find easier to read the entire if/else, it's up to what you feel to be the better (as long as it doesn't hurt your code logic, anyway =).

Son Of Cain

Create an account

Register a new account

• Forum Statistics

• Total Topics
627746
• Total Posts
2978905

• 10
• 10
• 21
• 14
• 14