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为什么?请与理性分享最好的称呼。
2 回答
![?](http://img1.sycdn.imooc.com/533e4ce900010ae802000200-100-100.jpg)
慕尼黑8549860
TA贡献1818条经验 获得超11个赞
在这些行中:
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,而不是截断它。
![?](http://img1.sycdn.imooc.com/54584f8f00019fc002200220-100-100.jpg)
胡子哥哥
TA贡献1825条经验 获得超6个赞
即使它是两个long
值,它也在进行整数除法。如果这样做,System.out.println(1.0 * MICRO_PER_DAY / MILLIS_PER_DAY);
您将获得一个浮点数。
寻找避免整数除法的最佳方法将是您的最佳选择,并且会根据您的应用程序进行更改。
添加回答
举报
0/150
提交
取消