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);
}
}
Run Code Online (Sandbox Code Playgroud)
虽然预期的答案是1000,但javac给它为5.理由?
Mar*_*aux 13
长x要创建不是您所期望的价值.它在整数范围内.要创建长片,请使用:
final long x = 24L*60L*60L*1000L*1000L;
final long y = 24L*60L*60L*1000L;
System.out.println(x/y);
Run Code Online (Sandbox Code Playgroud)
在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` */
Run Code Online (Sandbox Code Playgroud)
该表达式24*60*60*1000*1000 是一个int类型不是long 你想要的是24L*60*60*1000*1000这是long
这就是你拥有的.
final long x = (24*60*60*1000*1000) & 0xFFFFFFFF;
final long y = (24*60*60*1000) & 0xFFFFFFFF;
System.out.println(x/y);
Run Code Online (Sandbox Code Playgroud)
你想要的是什么
final long x = 24L*60*60*1000*1000;
final long y = 24L*60*60*1000;
System.out.println(x/y);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22223 次 |
| 最近记录: |