为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

函数式编程 2021-04-09 14:15:33
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 回答

?
慕尼黑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,而不是截断它。


查看完整回答
反对 回复 2021-04-14
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

即使它是两个long值,它也在进行整数除法。如果这样做,System.out.println(1.0 * MICRO_PER_DAY / MILLIS_PER_DAY);您将获得一个浮点数。

寻找避免整数除法的最佳方法将是您的最佳选择,并且会根据您的应用程序进行更改。


查看完整回答
反对 回复 2021-04-14
  • 2 回答
  • 0 关注
  • 203 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信