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


    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类型

  • 相关阅读:
    poj 2674 Linear world
    poj 3185 The Water Bowls
    The Largest Clique (uva11324)
    Proving Equivalences (LA 4287)
    强联通分量( HihoCoder 1185 )
    求点双联通分量(HihoCoder
    求桥,割点(HihoCoder
    欧拉回路
    uva10054
    表达式树(公共表达式消除 uva 12219)
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13313943.html
Copyright © 2020-2023  润新知