Reputation: 2188
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
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
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
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
For more about MathContext: https://www.tutorialspoint.com/java/math/java_math_mathcontext.htm
Upvotes: 3
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