class test{
public static void main(String... args){
double d=5.637;
System.out.println("double is:"+d);
long a=(long)d;
System.out.println("long is:"+a);
}
}
Выходной код вышеуказанного кода long is : 5
, который как и ожидалось.ТипСпецификация от двойного к длинному в JAVA
Но когда я побежал следующий код:
class test{
public static void main(String... args){
double d=123456789.637;
System.out.println("double is:"+d);
long a=(long)d;
System.out.println("long is:"+a);
}
}
Выход, как ожидалось. результат long is:9223372036854775807
Я хочу спросить, почему это происходит, когда я беру огромное количество в двойном размере.
длинной формы этого двойных пересекают максимальное допустимое значение в течение длительного времени. –
Когда значение 'double' превышает максимальное значение' long', результат [Сужение примитивного преобразования (JLS §5.1.3)] (https://docs.oracle.com/javase/specs/jls/se8 /html/jls-5.html#jls-5.1.3) от 'double' до' long' '' Long.MAX_VALUE', то есть '9223372036854775807': * [Когда] число с плавающей запятой преобразуется в' long' , [... и] значение [слишком] (положительное значение большой величины или положительная бесконечность), а результат [...] является наибольшим представимым значением типа 'long'. * – Andreas