java.lang.ArithmeticException:除以零

时间:2019-03-17 21:34:34

标签: java android android-5.0-lollipop

对此有很多麻烦。它可以在Android牛轧糖和棉花糖上运行,但不能在Lollipop上运行(主要是我的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行中签入了它。

2 个答案:

答案 0 :(得分:1)

如果endTime - startTime小于1000,则除法运算符将返回0。除以1000.0

答案 1 :(得分:0)

当分母由于小差异而变为零时,它将崩溃。 使用双打,检查分母,如果为零,则如下所示生成一些值(例如1或0.1)。

double den = (endTime - startTime) / 1000.0)) * 8.0 ;
if(den==0) den= 0.1;
double rate = (((size / 1024) / (den);

我认为这样的代码可以解决您的崩溃问题。