Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exac
2017-02-18 14:22
423 查看
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类型
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类型
相关文章推荐
- Java异常:Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion;
- Java异常:Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion;
- elasticsearch 报出 Exception in thread "main" java.lang.NoSuchFieldError: LUCENE_3_6
- Exception in thread "main" java.lang.NoSuchFieldError: level
- Exception in thread "main" java.lang.UnsatisfiedLinkError: no hello in java.library.path
- Exception in thread "main" java.lang.UnsupportedOperationException: No Encoder found for Any
- Exception in thread "main" java.lang.ClassCastException: java.math.BigDecimal cannot be cast to ja
- Exception in thread "main" java.lang.UnsatisfiedLinkError: no jniopencv_highgui in java.library.path
- hive Exception in thread "main" java.lang.NoSuchFieldError: type
- Exception in thread "main" java.lang.NoSuchFieldError的 一种解决办法
- Exception in thread "main" java.lang.IllegalStateException: EJBCLIENT000025: No EJB receiver availab
- Exception in thread "main" java.lang.RuntimeException: java.lang.NoSuchFieldException: versionID
- Exception in thread "main" java.lang.NoSuchFieldError: INSTANCE
- Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/collections/map/LRUMap
- Jbpm发邮件抛出Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
- Exception in thread "main" java.lang.NoClassDefFoundError: 错误
- 解决Exception in thread "main" java.lang.NoClassDefFoundError: java/sql/Savepoint
- Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
- Exception in thread "main" java.lang.NoClassDefFoundError: net/sf/ehcache/CacheException异常处理
- Exception in thread "main" java.lang.NoClassDefFoundError 问题及其解决方法