猿问

java.lang.ArithmeticException: 除以零

这有很多麻烦。它运行在Android Nougat和Marshmallow上,但在棒棒糖上它不起作用(主要是我的fireTV)。我遇到了问题。任何想法为什么这是崩溃?java.lang.ArithmeticException: divide by zero


long startTime = System.currentTimeMillis();

InputStream is = response.body().byteStream();

BufferedInputStream bis = new BufferedInputStream(is);


long size = 0;

int red = 0;

byte[] buf = new byte[1024];

while ((red = bis.read(buf)) != -1) {

    size += red;

}

long endTime = System.currentTimeMillis();


Log.d("ERROR CHECK", startTime + " " + endTime + " " + size);

double rate = (((size / 1024) / ((endTime - startTime) / 1000)) * 8); // THIS IS WHERE MY PROBLEM IS - A ZERO

                                                                        // SOMEWHERE.

Log.d("ERROR CHECK", "No Zeros....");

rate = Math.round(rate * 100.0) / 100.0;

String ratevalue;

if (rate > 1000)

    ratevalue = String.valueOf(rate / 1024).concat(" Mbps");

else

    ratevalue = String.valueOf(rate).concat(" Kbps");

if (is != null) {

    is.close();

}

if (bis != null) {

    bis.close();

}

Log.d("download", "download speed = " + ratevalue);

我用注释指出的行是问题所在。该行中的所有值都已填充,我在它之前签入了 Log.d 行。


杨魅力
浏览 218回答 2
2回答

慕森王

如果 小于 ,则除法运算符将返回 。除以endTime - startTime100001000.0

www说

当分母由于微小差异而变为零时,它会崩溃。使用双精度值,检查分母,如果为零,则创建一些值(如1或0.1),如下所示。double den = (endTime - startTime) / 1000.0)) * 8.0 ;if(den==0) den= 0.1;double rate = (((size / 1024) / (den);我认为像这样的代码会解决你的崩溃问题。
随时随地看视频慕课网APP

相关分类

Java
我要回答