Sign in to follow this  
CRACK123

[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 this post


Link to post
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 this post


Link to post
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 this post


Link to post
Share on other sites
Guest Anonymous Poster
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 this post


Link to post
Share on other sites
Guest Anonymous Poster
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 this post


Link to post
Share on other sites
Guest Anonymous Poster
Geez. This forum is the worst.

http://phpfi.com/115271

ffs

Share this post


Link to post
Share on other sites
Guest Anonymous Poster
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 this post


Link to post
Share on other sites
Quote:
Original post by Anonymous Poster
Its 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 this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
Guest Anonymous Poster
>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.

Share this post


Link to post
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 this post


Link to post
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 this post


Link to post
Share on other sites
Quote:
Original post by Son of Cain
With 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 this post


Link to post
Share on other sites
Quote:
Original post by Son of Cain
Yes, 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 this post


Link to post
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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this