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在整数范围内是500654080.这除以y(= 86400000),结果为5.794607407407407 …. Java截断小数部分,导致5.
通过在数字文字后面添加一个L,您可以告诉编译器将其编译为long而不是int.您期望的x的值是86400000000.但是被编译为int.
我们可以通过将其截断为int来重现x(500654080)的错误值:
// 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