为了账号安全,请及时绑定邮箱和手机立即绑定

java.lang.ArithmeticException: 除以零

java.lang.ArithmeticException: 除以零

杨魅力 2022-08-17 10:45:50
这有很多麻烦。它运行在Android Nougat和Marshmallow上,但在棒棒糖上它不起作用(主要是我的fireTV)。我遇到了问题。任何想法为什么这是崩溃?java.lang.ArithmeticException: divide by zerolong 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 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

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



查看完整回答
反对 回复 2022-08-17
?
www说

TA贡献1775条经验 获得超8个赞

当分母由于微小差异而变为零时,它会崩溃。使用双精度值,检查分母,如果为零,则创建一些值(如1或0.1),如下所示。


double den = (endTime - startTime) / 1000.0)) * 8.0 ;

if(den==0) den= 0.1;

double rate = (((size / 1024) / (den);

我认为像这样的代码会解决你的崩溃问题。


查看完整回答
反对 回复 2022-08-17
  • 2 回答
  • 0 关注
  • 217 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号