Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exac

来源:互联网 发布:金牛考勤软件 编辑:程序博客网 时间:2024/06/05 20:29

1、错误描述

Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.at java.math.BigDecimal.divide(BigDecimal.java:1616)at com.you.model.AddSubMulDiv.addSubMulDiv(AddSubMulDiv.java:59)at com.you.model.AddSubMulDiv.main(AddSubMulDiv.java:81)

2、错误原因

/** * * 项目名称:DABF * 项目包名:com.you.model * 文件名称:AddSubMulDiv.java * 类型名称:AddSubMulDiv * 创建作者:游海东 * 创建日期:2017-2-18 * 创建时间:上午9:10:27 * 版权所有: * 项目版本:V1.0 */package com.you.model;import java.math.BigDecimal;/** * BigDecimal加减乘除 * 文件名称:AddSubMulDiv.java * 文件类型:AddSubMulDiv * 文件包名:com.you.model * 创建作者:游海东 * 创建日期:2017-2-18 * 创建时间:上午9:10:27 */public class AddSubMulDiv {/** *  * 方法描述:加减乘除 * 创建作者:游海东 * 创建日期:2017-2-18 * 创建时间:上午9:12:53 * 方法名称:addSubMulDiv * 方法类型:AddSubMulDiv * 返回类型:BigDecimal * @param anum * @param bnum * @param type * @return */public static BigDecimal addSubMulDiv(double anum,double bnum,String type){BigDecimal oneNum = new BigDecimal(anum);BigDecimal twoNum = new BigDecimal(bnum);BigDecimal resultNum = new BigDecimal(0);switch(type){case "ADD":resultNum = oneNum.add(twoNum);break;case "SUB":resultNum = oneNum.subtract(twoNum);break;case "MUL":resultNum = oneNum.multiply(twoNum);break;case "DIV":resultNum = oneNum.divide(twoNum);break;default:break;}resultNum = resultNum.setScale(2,BigDecimal.ROUND_HALF_UP);return resultNum;}/** * 方法描述:加减乘除测试 * 创建作者:游海东 * 创建日期:2017-2-18 * 创建时间:上午9:10:28 * 方法名称:main * 方法类型:AddSubMulDiv * 返回类型:void * @param args */public static void main(String[] args) {BigDecimal sumNum = addSubMulDiv(667.53, 227.89, "DIV");System.out.println(sumNum);}}

            由于传入的两个操作数都是double类型,在做除法运算时导致除不尽,无限不循环小数,导致报错


3、解决办法

(1)除法运算时,将结果四舍五入处理

(2)将两个操作数改成String类型

0 0
原创粉丝点击