64bit Integer has the same limit as 32bit integer [duplicate] - java

This question already has answers here:
"Integer number too large" error message for 600851475143
(8 answers)
Closed 4 years ago.
This is just a short question but I'm still curious. When I initialize a int variable with the highest value 2147483647 it's allright. but when I want to initialize a long and assign it to it's max value, it gives me a "number too large" error
int i = 2147483647;
long j = 9223372036854775807;

9223372036854775807 is an int literal, but is too large to fit into an int, hence the error. You can use a long literal instead by adding L to the end of it:
long j = 9223372036854775807L;
// Here --------------------^

Related

Why isn't explicit type casting for Math.pow() causing integer overflow? [duplicate]

This question already has answers here:
How does double to int cast work in Java
(3 answers)
Closed 4 years ago.
I understand that the result of Math.pow() is a double.
However, why isn't the below code causing an integer overflow when I have explicitly casted the result to an int?
Also, why is the result of both 'a' and 'b' the same i.e 2147483647
int a=(int)(Math.pow(2,377));
int b=(int)(Math.pow(2,32));
System.out.println(a);
System.out.println(b);
If a double is larger than the maximal int value, converting it to int will give you the maximal int value.

Calculate percentage with BigDecimals [duplicate]

This question already has answers here:
Int division: Why is the result of 1/3 == 0?
(19 answers)
Closed 4 years ago.
I want to calculate the of a number I receive in BigDecimal format :
BigDecimal number1 = new BigDecimal("17");
int percentage = 50;
BigDecimal percentageAmount = number1.multiply(new BigDecimal(percentage/100));
but I got a 0 !
Cast the divided result to double. The integer division is returning zero as expected. This should work.
BigDecimal percentageAmount = number1.multiply(new BigDecimal((double)percentage/100));
Or, make the 100 to 100.0.
BigDecimal percentageAmount = number1.multiply(new BigDecimal(percentage/100.0));
These solutions would work if the number is small as you have used. But these solutions won't give the precise results when the number is big. This would be the best approach for avoiding the precision error:
BigDecimal percentageAmount = number1.multiply(BigDecimal.valueOf((double)percentage/100));

Why am I getting 0? [duplicate]

This question already has answers here:
Division of integers in Java [duplicate]
(7 answers)
Closed 5 years ago.
I keep getting 0 with the following equation, and I'm sure it is something I am missing, but this has been bugging me for the past few days.
int BASE_SIZE = 8;
Point screenSize = new Point(1440,2000);
mMaxSize = mScreenSize.x/BASE_SIZE;
// This line is the line causing issue.
int surfaceViewSize = mMaxSize * ((BASE_SIZE-1)/BASE_SIZE);
This is regardless of if I make the variable an integer, if I use Math.round, I make it a double, anything. I can not for the life of me figure this out.
this integer division here:
(BASE_SIZE-1)/BASE_SIZE
result to be
int surfaceViewSize = mMaxSize * 0;
you need to cast one of the operands into a double or float
replace your operations with:
mMaxSize = 1.0*mScreenSize.x/BASE_SIZE;
int surfaceViewSize = mMaxSize * ((1.0*BASE_SIZE-1)/BASE_SIZE);
int surfaceViewSize = (mMaxSize * (BASE_SIZE-1))/BASE_SIZE;
Try this its just a braces issue

cast (int) does not work correctly [duplicate]

This question already has answers here:
How does Java handle integer underflows and overflows and how would you check for it?
(12 answers)
Closed 7 years ago.
I initialized a double a with Math.pow(10,24).
Now I need to convert double a to int b:
a = Math.pow(10,24)
int b = (int)a;
System.out.println(a);
System.out.println(b);
System prints out :
1.0E24
2147483647
This result is obviously not correct.
It's because Integer has limit INT_MAX - 2147483647

How to get a int from a long double in java? [duplicate]

This question already has answers here:
Integer division: How do you produce a double?
(11 answers)
Closed 7 years ago.
I wanna do this math in java:
int index = 3 * (9568/20001);
in my calculator it shows 3 *( 0.47837608... ) which is 1.43512824..
but, In Java that always give me 0, even I were trying use format, or java.lang.Math.round.
The first postion int 1 of 1.43512824 is what I want to get.
Try this
int index = (int)3 * (9568.0/20001);
Because an integer divided by an integer gives a integer in java thus your answer will not be accurate. If you write 9568.0/20001 it gives a double result and so result is more accurate.

Categories