Jump to content

  • Log In with Google      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.

  • You cannot reply to this topic
18 replies to this topic

#1 CRACK123   Members   -  Reputation: 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

Sponsor:

#2 Son of Cain   Members   -  Reputation: 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

#3 Kevinator   Members   -  Reputation: 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));
}
}



#4 Sean T. McBeth   Crossbones+   -  Reputation: 1379

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   -  Reputation:

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   -  Reputation:

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   -  Reputation:

0Likes

Posted 28 April 2006 - 03:59 PM

Geez. This forum is the worst.

http://phpfi.com/115271

ffs

#8 Sean T. McBeth   Crossbones+   -  Reputation: 1379

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   -  Reputation:

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

#10 RayNbow   Members   -  Reputation: 191

Like
0Likes
Like

Posted 29 April 2006 - 10:47 PM

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.

#11 Son of Cain   Members   -  Reputation: 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.

#12 Sean T. McBeth   Crossbones+   -  Reputation: 1379

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   -  Reputation:

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.

#14 Raghar   Members   -  Reputation: 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);

#15 Son of Cain   Members   -  Reputation: 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





#16 RayNbow   Members   -  Reputation: 191

Like
0Likes
Like

Posted 01 May 2006 - 06:54 PM

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




#17 Son of Cain   Members   -  Reputation: 480

Like
0Likes
Like

Posted 02 May 2006 - 03:11 AM

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

#18 Whackjack   Members   -  Reputation: 100

Like
0Likes
Like

Posted 02 May 2006 - 04:46 AM

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

#19 Son of Cain   Members   -  Reputation: 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.



PARTNERS