浏览 3208 次
锁定老帖子 主题:Java连续乘法遇到的问题
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-07-12
最后修改:2009-07-12
long period =30* 24 * 60 * 60 * 1000; System.out.println("30 * 24 * 60 * 60 * 1000="+period); 执行,输出结果非常可怕。 JDK 1.6 输出结果: 30 * 24 * 60 * 60 * 1000=-1702967296 JDK 1.5 输出结果: 30 * 24 * 60 * 60 * 1000=-1702967296 难道是Java的BUG吗?我很难相信,Java在处理这么简单的事情,居然会有BUG。 我将以上测试代码,稍微调整之后,如下 long period = 24 * 60 * 60 * 1000; System.out.println("24 * 60 * 60 * 1000=" + period); period *= 30; System.out.println("30 * 24 * 60 * 60 * 1000=" + period); JDK1.6输出如下结果: 24 * 60 * 60 * 1000=86400000 30 * 24 * 60 * 60 * 1000=2592000000 JDK1.5输出如下结果: 24 * 60 * 60 * 1000=86400000 30 * 24 * 60 * 60 * 1000=2592000000 调整后,Java的处理结果完全正确。 再次调整代码,如下: long period = 30l * 24 * 60 * 60 * 1000; System.out.println("30l * 24 * 60 * 60 * 1000=" + period); 输出: 30l * 24 * 60 * 60 * 1000=2592000000 输出结果正确。 总结如下: Java在处理连续乘法或除法时,最好注明数字的类型,否则可能会得到不正确的结果。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-07-12
默认是Integer,超过了最大值2^31,溢出了
|
|
返回顶楼 | |
发表时间:2009-07-12
溢出了,兄台.....
|
|
返回顶楼 | |
发表时间:2009-07-13
呵呵!让各位见笑了!
以前没注意过这方面。 是我错怪Java了。 |
|
返回顶楼 | |
发表时间:2009-08-13
最后修改:2009-11-04
溢出嘛,用大整数类型的classes...要不换Scala,书写起来还漂亮点。
|
|
返回顶楼 | |
发表时间:2010-04-02
纠正下1楼,int最大值是2^31-1
|
|
返回顶楼 | |
发表时间:2010-04-03
BigDicmal
|
|
返回顶楼 | |