Meaningless Drivel is fun!
The moose likes Beginning Java and the fly likes adding big decimal numbers Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "adding big decimal numbers" Watch "adding big decimal numbers" New topic

adding big decimal numbers

Mahesh Pinnamaneni
Ranch Hand

Joined: Jul 02, 2004
Posts: 100
hi all,
here is a problem while adding big decimal numbers.can anyone help me pls.
double d1 = 999999999999.11;
double d2 = 9.11;
double d4 = (d1 + d2);
System.out.println(" Adding big double numbers:::"+d4);
// this will give me o/p as :: 1.00000000000822E12

but i am interested in getting the exact value.
pls help me.
thanks & regards,
Scott Selikoff
Saloon Keeper

Joined: Oct 23, 2005
Posts: 3753

I'm surprised you're getting scientific notation for this by default, although somewhere I believe there exists a setting for this? Anyone?

Regardless, you can use the NumberFormat/DecimalFormat utility classes to display as you want:

By the way, you mentioned the 'exact' value, technically d4 represents the exact value, it just displays in non-useful format. If you want to perform operations on the 'exact' value, you should still use d4. Only use the formatter to display the data on the screen to the user.
[ November 09, 2005: Message edited by: Scott Selikoff ]

[OCA 8 Book] [Blog]
Jesper de Jong
Java Cowboy
Saloon Keeper

Joined: Aug 16, 2005
Posts: 15094

If you want to do exact calculations with decimal numbers, you'd better use class java.math.BigDecimal instead of double. double has a limited accuracy.

Java Beginners FAQ - JavaRanch SCJP FAQ - The Java Tutorial - Java SE 8 API documentation
Steve Morrow
Ranch Hand

Joined: May 22, 2003
Posts: 657

but i am interested in getting the exact value.

Some things you should know about floating-point arithmetic
What Every Computer Scientist Should Know About Floating-Point Arithmetic
Stan James
(instanceof Sidekick)
Ranch Hand

Joined: Jan 29, 2003
Posts: 8791
You've bumped into two problems.

First, it's not possible to represent many fractions precisely in binary. Almost no computer languages or calculators will do this: (1 / 3) * 3 = 1. On the other hand most do (1 * 3) / 3 pretty well because there are no fractions involved.

Second, floats and doubles have two parts, sometimes called significand and exponent. The value is the significand times 2 raised to the exponent power. Since you get 8 or 11 bits of exponent you can multiply out some very large numbers. But the significand has only 23 or 52 bits so you can only have so many digits before you multiply. If you have more digits of precision than fit into those bits, some digits are lost.

Floats are good for the distance between galaxies or the size of an electron, but lousy for Bill Gates's checking account.

A good question is never answered. It is not a bolt to be tightened into place but a seed to be planted and to bear more seed toward the hope of greening the landscape of the idea. John Ciardi
I agree. Here's the link:
subject: adding big decimal numbers
It's not a secret anymore!