java.lang.ArithmeticException: Division undefined
2013-12-22 17:02
701 查看
原代码:
BigDecimal divide(BigDecimal divisor)
返回一个BigDecimal,其值为(this / divisor),其首选标度为(this.scale() - divisor.scale())。
BigDecimal divide(BigDecimal
divisor, int scale, int roundingMode)
返回一个BigDecimal,其值为(this / divisor),其标度为指定标度。
报错分析: 代码中使用的是divide(arg0)方法,故divide(htje)标度为两变量的scale值之差,zgcghtje的scale值为0,htje的scale值为2(可通过.scale()方法查看),故divide(htje)标度为-2,小于0,报错。
解决办法:divide行代码修改为bdTemp = zgcghtje.divide(htje, 4, RoundingMode.HALF_UP);
修改后运行,报除0错误,分析知0值判断处的代码有误,修改为if(htje.intValue() != 0),运行,测试通过。
BigDecimal htje; BigDecimal zgcghtje; BigDecimal bdTemp = BigDecimal.ZERO; double dRate; for(int i=0; i<iLength; i++){ htje = contractByTradeList.get(i).getHtje(); zgcghtje = contractByTradeList.get(i).getZgcghtje(); if(htje != BigDecimal.ZERO){ bdTemp = zgcghtje.divide(htje); bdTemp = bdTemp.multiply(BigDecimal.valueOf(100L)); dRate =bdTemp.doubleValue(); contractByTradeList.get(i).setZgcgl(dRate); } else{ contractByTradeList.get(i).setZgcgl(0.0); } }报错信息:
- Exception occurred during processing request: Division undefined java.lang.ArithmeticException: Division undefined at java.math.BigDecimal.divide(BigDecimal.java:1486) at com.comtop.csgbi.jj.scfx.employeeholdstock.action.EmployeeHoldStockAction.setZGCGL(EmployeeHoldStockAction.java:235) at com.comtop.csgbi.jj.scfx.employeeholdstock.action.EmployeeHoldStockAction.readChart1Data(EmployeeHoldStockAction.java:11 2) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597)错误指向bdTemp = zgcghtje.divide(htje)一行,
BigDecimal divide(BigDecimal divisor)
返回一个BigDecimal,其值为(this / divisor),其首选标度为(this.scale() - divisor.scale())。
BigDecimal divide(BigDecimal
divisor, int scale, int roundingMode)
返回一个BigDecimal,其值为(this / divisor),其标度为指定标度。
报错分析: 代码中使用的是divide(arg0)方法,故divide(htje)标度为两变量的scale值之差,zgcghtje的scale值为0,htje的scale值为2(可通过.scale()方法查看),故divide(htje)标度为-2,小于0,报错。
解决办法:divide行代码修改为bdTemp = zgcghtje.divide(htje, 4, RoundingMode.HALF_UP);
修改后运行,报除0错误,分析知0值判断处的代码有误,修改为if(htje.intValue() != 0),运行,测试通过。
相关文章推荐
- eclipse创建web工程,工程名出现红色感叹号
- Java基础之处理事件——选项按钮的鼠标监听器(Lottery 2 with mouse listener)
- java基础知识11-java运行时
- java 访问修饰符
- java基础知识10-javaIO
- java基础知识9-java异常
- java基础知识8-数组
- java基础知识7-类的继承2
- eclipse maven plugin 插件 安装 和 配置
- java 连接 sqlServer2008 图文详解
- java正则表达式验证标点符号
- java正则表达式验证标点符号
- java正则表达式验证标点符号
- java正则表达式验证标点符号
- Java基础之处理事件——使用适配器类(Sketcher 3 using an Adapter class)
- JAVA操作properties文件
- java数据类型
- java数组概述
- java语言的注释、标识符、关键字等概述
- java常用命令提示符