日期:2014-05-20  浏览次数:20811 次

java中long型的除法
java中 long t = System.currentTimeMillis(); System.out.println(t/60/60/24/365/1000);这个的答案就正确,而System.out.println(t/(60*60*24*365*1000));输出就错误. (long i1 = 60*60*24*365;
  System.out.println(t/(i1*1000)); )这两句合起来也正确.为什么,怎么想都想不通 .求高手解答.谢谢了...
------最佳解决方案--------------------
主要问题只有一个:
  默认书写数字的方式下,数值是 int 型;
那么连续做乘法,是会溢出的

所以:
  t/(60*60*24*365*1000)
应修改为(加个L):
  t/(60l*60*24*365*1000)
------其他解决方案--------------------
楼上强大啊啊
------其他解决方案--------------------
引用:
主要问题只有一个:
  默认书写数字的方式下,数值是 int 型;
那么连续做乘法,是会溢出的

所以:
  t/(60*60*24*365*1000)
应修改为(加个L):
  t/(60l*60*24*365*1000)

首先谢谢你的回答.
像你这样改的确可以,但是我把整个(60*60*24*365*1000)写成long型为什么就不可以了?
------其他解决方案--------------------
引用:
主要问题只有一个:
  默认书写数字的方式下,数值是 int 型;
那么连续做乘法,是会溢出的

所以:
  t/(60*60*24*365*1000)
应修改为(加个L):
  t/(60l*60*24*365*1000)

还有那个好像也没有溢出,,int型最大可以存储2147483647这么多,而(60*60*24*365*1000)只有1471228928...
------其他解决方案--------------------
(60*60*24*365*1000)只有1471228928.这个我也犯了同个错误.总之谢谢了,,现在懂了.