转载

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
正文到此结束
Loading...