Devi Hari

Greenhorn

Posts: 7

posted 11 years ago

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

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

Rancher

Posts: 42972

73

posted 11 years ago

Java has two classes for working with large integer and floating-point numbers. They're called java.math.BigInteger and java.math.BigDecimal, respectively.

Devi Hari

Greenhorn

Posts: 7

posted 11 years ago

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

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

Posts: 1970

posted 11 years ago

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.

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

Posts: 7

posted 11 years ago

That solved the problem.. Thanks a lot!!!

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!!!