This week's book giveaway is in the Java 8 forum.
We're giving away four copies of Java 8 in Action and have Raoul-Gabriel Urma, Mario Fusco, and Alan Mycroft on-line!
See this thread for details.
The moose likes Java in General and the fly likes Arithmetic operations with large numbers Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Java 8 in Action this week in the Java 8 forum!
JavaRanch » Java Forums » Java » Java in General
Bookmark "Arithmetic operations with large numbers" Watch "Arithmetic operations with large numbers" New topic
Author

Arithmetic operations with large numbers

Devi Hari
Greenhorn

Joined: Oct 03, 2005
Posts: 7
How can i do arithmetic operations with large numbers in java?
when i use double, it returns the result with E, can i avoid this way of representation?
simple multiplication like 154.2 * 100000 giving result as 1.5419999999999998E7

Please help
Ulf Dittmer
Marshal

Joined: Mar 22, 2005
Posts: 39575
    
  27
Java has two classes for working with large integer and floating-point numbers. They're called java.math.BigInteger and java.math.BigDecimal, respectively.


Ping & DNS - updated with new look and Ping home screen widget
Devi Hari
Greenhorn

Joined: Oct 03, 2005
Posts: 7
Originally posted by Ulf Dittmer:
Java has two classes for working with large integer and floating-point numbers. They're called java.math.BigInteger and java.math.BigDecimal, respectively.



Hi, thanks for the reply.
I've already tried using BigDecimal, but got problems with precision


this is the code :

double dAmnt = 154.20;
double amt = 1000000000;

BigDecimal bd1 = new BigDecimal(dAmnt);
BigDecimal bd2 = new BigDecimal(amt);
BigDecimal bd3 = bd1.multiply(bd2);
System.out.println("Bigdecimal == "+bd3);

I am getting the result as 154199999999.99998863131622783839702606201171875000000000
Peter Chase
Ranch Hand

Joined: Oct 30, 2001
Posts: 1970
The problem is that you are constructing your BigDecimal from a "double". But the numbers you are trying to use cannot be perfectly represented by a double, so are wrong before ever becomeing a BigDecimal. To confirm this, print out the values of your BigDecimals, before the multiplication.

Instead, you should avoid floating-point (e.g. "double") altogether and construct your BigDecimal from a String or from a BigInteger. See the API for details of these constructors.

Any attempt to use floating-point arithmetic in combination with BigDecimal or BigInteger is likely to end in disappointment.


Betty Rubble? Well, I would go with Betty... but I'd be thinking of Wilma.
Devi Hari
Greenhorn

Joined: Oct 03, 2005
Posts: 7
Originally posted by Peter Chase:
The problem is that you are constructing your BigDecimal from a "double". But the numbers you are trying to use cannot be perfectly represented by a double, so are wrong before ever becomeing a BigDecimal. To confirm this, print out the values of your BigDecimals, before the multiplication.

Instead, you should avoid floating-point (e.g. "double") altogether and construct your BigDecimal from a String or from a BigInteger. See the API for details of these constructors.

Any attempt to use floating-point arithmetic in combination with BigDecimal or BigInteger is likely to end in disappointment.




That solved the problem.. Thanks a lot!!!
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Arithmetic operations with large numbers
 
Similar Threads
Doubt about primitives
boolean operators
ArithmeticException
short + short == compiler error?
BigDecimal in JavaScript