我真的对此感到困惑。我正在划分两个正数并得到否定结果(我正在使用Java)。
long hour = 92233720368L / (3600 * 1000000 );
我的结果是-132。
但如果我把它们分成两个长数字,我得到了正确的结果:
long hour1 = 92233720368L / (3600000000L );
然后我得到结果:25
我想知道为什么会这样......
提前谢谢! :)
答案 0 :(得分:5)
您必须在L
或3600
末尾添加1000000
:
示例:
long hour = 92233720368L / (3600 * 1000000L );
以下是什么:
System.out.println(3600 * 1000000); // Gives -694967296 because it exceeds the max limit of an integer size. So 92233720368L / -694967296 = -132
这正是你所在部门发生的事情,支配者是一个整数,因为我上面提到的原因被认为是负数。因此,为了考虑long
类型的乘法结果,您应该在L
后或3600
之后添加1000000
答案 1 :(得分:2)
它将3600和10000000解释为类型int
,它无法保存足够的信息来表示其产品,因此您可以获得不同的数字。您必须将它们都声明为类型long
以获得正确的结果。