Java中的长分区没有按预期工作

class LongDiv{
public static void main(String [] args){

    final long x = 24*60*60*1000*1000;
    final long y = 24*60*60*1000;
    System.out.println(x/y);
}
}

虽然预期的答案是1000,但javac给它为5.原因?

您创建的长x不是您期望的值.它在整数范围内.要创建长片,请使用:

final long x = 24L*60L*60L*1000L*1000L;
final long y = 24L*60L*60L*1000L;
System.out.println(x/y);

您计算的x在整数范围内是5006540​​80.这除以y(= 86400000),结果为5.794607407407407 …. Java截断小数部分,导致5.

通过在数字文字后面添加一个L,您可以告诉编译器将其编译为long而不是int.您期望的x的值是86400000000.但是被编译为int.

我们可以通过将其截断为int来重现x(5006540​​80)的错误值:

// First correct
long x = 24L*60L*60L*1000L*1000L;
/* x = `86400000000`; */
// Now truncate
x &= 0xFFFFFFFFL; // again: don't forget the L suffix
/* x = `500654080` */

翻译自:https://stackoverflow.com/questions/6766120/long-division-in-java-not-working-as-expected

原文 

https://codeday.me/bug/20190111/517293.html

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Java中的长分区没有按预期工作

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址