Код: Выделить всё
import java.util.Scanner;
class Test{
public static void main(String[] args){
double d = 9223372036854775807.646;
int a = (int)d;
System.out.println(a); //Output : 2147483647
long l1 = 9223372036854775807l;
int b = (int) l1;
System.out.println(b); //Output : -1
int c = (int)9223372036854775807l;
System.out.println(c); //Output : -1
}
}
I’m confused about how Java handles casting large numeric values to int
My doubts:
Why does the first case (double → int) always give 2147483647 (Integer.max_value) для больших чисел, даже когда я явно поднимаю в (int)? Почему? Десятичная часть, держите только целочисленную часть, а затем преобразуйте ее так же, как и большое длинное значение. Но вместо этого он дает 2147483647 (integer.max_value). < /P>
Почему Java справляется с этим по -разному и не ведет себя как преобразование Long → Int? Почему нет «целого числа слишком большой» ошибки или поведения, подобного двум другим случаям?
Подробнее здесь: https://stackoverflow.com/questions/797 ... instead-of