猿问

整数除法:为什么打印错误的值?

public class PragsLongDivision{


public static void main (String [] args){

 final long MICRO_PER_DAY=24 * 60 * 60 * 1000 * 1000;

 final long MILLIS_PER_DAY= 24 * 60 * 60 * 1000;


  System.out.println(MICRO_PER_DAY / MILLIS_PER_DAY  );


   }

}

该程序打印5为什么?请与理性分享最好的称呼。


函数式编程
浏览 204回答 2
2回答

慕尼黑8549860

在这些行中: final long MICRO_PER_DAY=24 * 60 * 60 * 1000 * 1000; final long MILLIS_PER_DAY= 24 * 60 * 60 * 1000;每个常数整数都是类型的int,计算的结果也是类型的int。但是您会期望得到以下结果:86400000000forMICRO_PER_DAY太大而无法放入an的32位中int,因此会被截断。这称为数值溢出。要获得正确的结果,请使用以下命令: final long MICRO_PER_DAY=24L * 60 * 60 * 1000 * 1000; final long MILLIS_PER_DAY= 24L * 60 * 60 * 1000;所述L后缀之后24将引导编译器,以便它的结果存储在类型的64个位long,而不是截断它。

胡子哥哥

即使它是两个long值,它也在进行整数除法。如果这样做,System.out.println(1.0 * MICRO_PER_DAY / MILLIS_PER_DAY);您将获得一个浮点数。寻找避免整数除法的最佳方法将是您的最佳选择,并且会根据您的应用程序进行更改。
随时随地看视频慕课网APP

相关分类

Java
我要回答