System.out.println(1000*16777216/4890);
输出: -82342
...but应该是:3430923
我怎么才能解决这个问题?
发布于 2015-04-30 18:40:32
只需将一个L
添加到1000
或16777216
(或两者都)...and中即可。
正如阿尔冈金所说,这是整数值的正溢出,当您将1000
乘以16777216
时就会发生这种情况;这最终将大于(允许的最大值) Integer.MAX_VALUE
,因此它结束并从Integer.MIN_VALUE
开始(在您的示例中,值为-402653184
;除以4890
,您将得到意想不到的结果-82342
)。
请看一看(注意黄色高亮显示的部分;IDEA将使用表达式中的数字溢出警告您):
发布于 2015-04-30 18:48:42
首先,注意它是整数arithmetic.Whatever,中间的计算将作为整数存储在那里。1000*16777216
将给出超出整数范围的16777216000
。因此,现在系统试图在runtime.As 16777216000
>
Integer.MAX_VALUE
期间管理这个整数流,现在它移动负值来处理溢出。
尝试这样做,Integer.MAX_VALUE + 1
将给您提供-2147483648
.Better的管理方法,这就是使用long
原语,或者您可以使用double
作为浮点值。
https://stackoverflow.com/questions/29980882
复制相似问题