我正在编写一个小小的下载管理器,当我尝试以百分比计算下载进度时,我得到一个有趣的输出。这是我用它来计算的话:两个int的乘法得到负数
int progress = (byte_counter * 100)/size;
System.out.println("("+byte_counter+" * 100) = "+(byte_counter * 100)
+"/"+size+" = "+progress);
byte-counter
是一个int(它计数从InputStream
读取的总字节数)和size
是以字节为单位下载的文件的长度。
这对小下载很有用。但是当我得到更大的文件(40MB)时,它开始制作有趣的东西。计算输出如下所示:
[...]
(21473280 * 100) = 2147328000/47659008 = 45
(21474720 * 100) = 2147472000/47659008 = 45
(21476160 * 100) = -2147351296/47659008 = -45
(21477600 * 100) = -2147207296/47659008 = -45
[...]
我不知道为什么,但计算结果为负数。
由于正常的整数应该与数字一致,直到2 -1,这应该不是问题的根源。
但是我错过了什么?
呃,相反,一个正常的整数应该罚款数字高达'2^31-1',或'2,147,483,647' – StriplingWarrior 2011-05-18 20:54:09