•      Sign In
• Create Account

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

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

18 replies to this topic

### #1CRACK123  Members

235
Like
0Likes
Like

Posted 28 April 2006 - 05:33 AM

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

### #2Son of Cain  Members

480
Like
0Likes
Like

Posted 28 April 2006 - 05:42 AM

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

### #3Kevinator  Members

229
Like
0Likes
Like

Posted 28 April 2006 - 06:23 AM

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));    }}

### #4Sean T. McBeth  Members

1707
Like
0Likes
Like

Posted 28 April 2006 - 01:06 PM

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

[Formerly "capn_midnight". See some of my projects. Find me on twitter tumblr G+ Github.]

### #5 Anonymous Poster_Anonymous Poster_*   Guests

0Likes

Posted 28 April 2006 - 03:50 PM

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<

### #6 Anonymous Poster_Anonymous Poster_*   Guests

0Likes

Posted 28 April 2006 - 03:52 PM

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<

### #7 Anonymous Poster_Anonymous Poster_*   Guests

0Likes

Posted 28 April 2006 - 03:59 PM

Geez. This forum is the worst.

http://phpfi.com/115271

ffs

### #8Sean T. McBeth  Members

1707
Like
0Likes
Like

Posted 29 April 2006 - 11:49 AM

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

[Formerly "capn_midnight". See some of my projects. Find me on twitter tumblr G+ Github.]

### #9 Anonymous Poster_Anonymous Poster_*   Guests

0Likes

Posted 29 April 2006 - 10:10 PM

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

### #10RayNbow  Members

191
Like
0Likes
Like

Posted 29 April 2006 - 10:47 PM

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.

### #11Son of Cain  Members

480
Like
0Likes
Like

Posted 30 April 2006 - 09:04 AM

Half-dead subforum?
Ok dude, do not take the time to register. We appreciate your visit, and thanks for sharing those amazing lines of bean shell script.

### #12Sean T. McBeth  Members

1707
Like
0Likes
Like

Posted 30 April 2006 - 03:44 PM

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

[Formerly "capn_midnight". See some of my projects. Find me on twitter tumblr G+ Github.]

### #13 Anonymous Poster_Anonymous Poster_*   Guests

0Likes

Posted 30 April 2006 - 09:21 PM

>Half-dead subforum?

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.

### #14Raghar  Members

92
Like
0Likes
Like

Posted 01 May 2006 - 07:25 AM

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

### #15Son of Cain  Members

480
Like
0Likes
Like

Posted 01 May 2006 - 08:40 AM

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

### #16RayNbow  Members

191
Like
0Likes
Like

Posted 01 May 2006 - 06:54 PM

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

### #17Son of Cain  Members

480
Like
0Likes
Like

Posted 02 May 2006 - 03:11 AM

Yes, yes, my typo, and your version is even better optimized! =D

### #18Whackjack  Members

100
Like
0Likes
Like

Posted 02 May 2006 - 04:46 AM

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"?

### #19Son of Cain  Members

480
Like
0Likes
Like

Posted 02 May 2006 - 02:03 PM

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

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.