KANAYO AUGUSTIN UG
KANAYO AUGUSTIN UG

Reputation: 2188

How to store long decimal numbers in Java

I have a code in java that says,

btmpW / imgW

but in this case I get 0 as the value, I tried using int, long, float and double as my data type but it still returns 0.

When I try to do the Log.i() on both int values, I got this

I/btmpW: 548
I/imgW: 1041

So using a calculator to calculate, I got 0.5346341463... and I am new to Java, but I think Java don't accept numbers with more than 9 digits, making me assume that Java returns only the (int)0 and since the digits are more than 9, it just ignored the decimal. So i searched and found something like BigDecimal and BigInteger. So I tried to use them, but I am getting some errors

So I want to know, is there a way to store such value in Java. btmpW and imgW are user defined so I don't know what the outcome would be when I run btmpW / imgW, so basically, is there a digits data type in Java that stores both long, short, integer and decimal numbers

Update

Below are the errors I am getting

BigDecimal a = (BigDecimal)btmpW / imgW;  //Inconvertibles types; cannot cast 'int' to java.math.BigDecimal

BigInteger a = (BigInteger)btmpW / imgW;  //Inconvertibles types; cannot cast 'int' to java.math.BigInteger

BigIntegers a = (BigIntegers)btmpW / imgW;  //Inconvertibles types; cannot cast 'int' to java.math.BigIntegers

BigDecimal a = btmpW / imgW;  //Inconvertibles types; REQUIRED: BigDecimal FOUND int

BigInteger a = btmpW / imgW;  //Inconvertibles types; REQUIRED: BigInteger FOUND int

BigIntegers a = btmpW / imgW;  //Inconvertibles types; REQUIRED: BigIntegers FOUND int

Upvotes: 0

Views: 16512

Answers (3)

KANAYO AUGUSTIN UG
KANAYO AUGUSTIN UG

Reputation: 2188

I think this trick got it working... I had to change my int values to double, and worked with double instead

Initial code

int imgW = imageView.getWidth();
int btmpW = bitmap.getWidth();

Final code

double imgW = imageView.getWidth();
double btmpW = bitmap.getWidth();
double a = btmpW / imgW;

Upvotes: 0

Nitin Bisht
Nitin Bisht

Reputation: 5361

Try this:

int btmpW = 548;
int imgW = 1041;

BigDecimal btm = new BigDecimal(btmpW);
BigDecimal img = new BigDecimal(imgW);

System.out.println(img.divide(btm, MathContext.DECIMAL128));

Output:
1.899635036496350364963503649635036

Reference: https://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html#divide-java.math.BigDecimal-java.math.MathContext-

For more about MathContext: https://www.tutorialspoint.com/java/math/java_math_mathcontext.htm

Upvotes: 3

Lungu Daniel
Lungu Daniel

Reputation: 844

You have to convert those tow numbers in BigDecimal first. I'm not sure what type does your numbers have, but if it's String, primitive (e.g. int, double) or primitive wrapper (e.g. Integer, Double) you could try to convert them directly as follow:

BigDecimal dbBtmpW = new BigDecimal(btmpW);
BigDecimal dbImgW = new BigDecimal(imgW);

After that you could use divide method to do your operation, unfortunately Java doesn't support operator overloading, so you have to call the specific method:

BigDecimal result = dbBtmpW.divide(dbImgW);

I hope this it'll help you.

Upvotes: 0

Related Questions