Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Java > Round a Double

Reply
Thread Tools

Round a Double

 
 
Guest
Posts: n/a
 
      10-22-2004
e.g.

Double d = 12.34567;
I want this String: "12.35" and this Double: 12.35

Double d = 12;
I want this String: "12.00" and this Double: 12


How?
 
Reply With Quote
 
 
 
 
Paul Tomblin
Guest
Posts: n/a
 
      10-22-2004
In a previous article, "<- Chameleon ->" <(E-Mail Removed)> said:
>Double d = 12.34567;
>I want this String: "12.35" and this Double: 12.35
>
>Double d = 12;
>I want this String: "12.00" and this Double: 12


For the double, you could use the time honoured

d = (int)(d * 100 + 0.5) / 100.0;

which is what we've been using since the days when C wasn't ISO/ANSI-fied.

For the string, look up java.text.DecimalFormat, which can probably do
what you want.


--
Paul Tomblin <(E-Mail Removed)> http://xcski.com/blogs/pt/
When you need a helpline for breakfast cereals, it's about time to think
about tearing down civilisation and giving the ants a go.
-- Chris King
 
Reply With Quote
 
 
 
 
Chris Smith
Guest
Posts: n/a
 
      10-22-2004
In article <clb7b4$9rs$(E-Mail Removed)>, http://www.velocityreviews.com/forums/(E-Mail Removed)
says...
> Double d = 12.34567;
> I want this String: "12.35" and this Double: 12.35
>
> Double d = 12;
> I want this String: "12.00" and this Double: 12


To get the strings, see java.text.DecimalFormat. Specifically:

DecimalFormat fmt = new DecimalFormat();
fmt.setMinimumFractionDigits(2);
fmt.setMaximumFractionDigits(2);
String str = fmt.format(12.34567);

Getting a Double is more difficult, and it's unclear what you want.
Doubles in Java are not stored in BCD, but rather as binary floating-
point numbers, so it makes no sense to talk about truncating them to a
certain number of decimal digits. Any given two decimal place decimal
number may or may not even be exactly representable as a float; it may
actually be a repeating decimal instead.

However, while there is not guaranteed to be a double that's exactly
equal to 12.35, there *is* guaranteed to be a double that will be
converted to "12.35" by methods such as Double.toString, String.valueOf,
and so forth. The easiest way to get that is to do the String
conversion above, and then use Double.parseDouble to get a double back
out (or Double.valueOf if you need a Double instead). Just be aware
that the value of the result may not be exactly 2.35; it will be the
double value nearest to 2.35 that can be exactly represented in binary
floating point.

(I'm using 2.35 merely as an example above, so when I say "may not" or
"may", I certainly *don't* mean that the behavior is undefined. Rather
I mean that it's perfectly well defined for a given value; but changing
2.35 to a different value could change those facts.)

--
www.designacourse.com
The Easiest Way To Train Anyone... Anywhere.

Chris Smith - Lead Software Developer/Technical Trainer
MindIQ Corporation
 
Reply With Quote
 
Carl Howells
Guest
Posts: n/a
 
      10-22-2004
Chris Smith wrote:

> (I'm using 2.35 merely as an example above, so when I say "may not" or
> "may", I certainly *don't* mean that the behavior is undefined. Rather
> I mean that it's perfectly well defined for a given value; but changing
> 2.35 to a different value could change those facts.)


2.35 turns out to be one of those values that isn't exactly expressible
in binary, so that disclaimer wasn't strictly necessary.

Quickest way to see this: .35 = .25 + .1
And while .25 decimal is obviously exactly representable in in binary
(.01), .1 decimal is the classic value which isn't exactly representable
in binary, so their sum clearly can't be represented exactly in binary.
 
Reply With Quote
 
marcus
Guest
Posts: n/a
 
      10-22-2004
If I need Strings of a particular number of decimal places I usually
work in ints at the order of magnitude I need. 16.35 = 1635, with a
routine that takes the int and returns a string, modified with
placeholders if necessessary. Fast and neat, and no rounding.

-- clh

<- Chameleon -> wrote:
> e.g.
>
> Double d = 12.34567;
> I want this String: "12.35" and this Double: 12.35
>
> Double d = 12;
> I want this String: "12.00" and this Double: 12
>
>
> How?


 
Reply With Quote
 
thakre_iit thakre_iit is offline
Junior Member
Join Date: May 2008
Posts: 3
 
      05-28-2008
DecimalFormat fmt = new DecimalFormat();
fmt.setMinimumFractionDigits(0);
fmt.setMaximumFractionDigits(0);
String str = fmt.format(12.64567);
System.out.println("...."+str);
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
So, round and round... 70-682... MSLearning, please read! DaGenester MCITP 2 05-20-2010 04:36 PM
VS2005 - Going round and round in circles again :) postings@alexshirley.com ASP .Net 0 06-22-2006 11:26 AM
Float.round - should it be round-to-even OliverMarchand Ruby 2 04-12-2006 12:06 PM
cannot convert parameter from 'double (double)' to 'double (__cdecl *)(double)' error Sydex C++ 12 02-17-2005 06:30 PM
Computer Goes Round and Round Checking Alan Computer Support 6 10-08-2004 08:24 AM



Advertisments