Non-terminating decimal expansion; no exact representable decimal result

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.example.BigDecimals.main(BigDecimals.java:40)

2、错误原因

/**
 *
 * 项目名称:DABF
 * 项目包名:com.you.example
 * 文件名称:BigDecimals.java
 * 类型名称:BigDecimals
 * 创建作者:游海东
 * 创建日期:2017-1-11
 * 创建时间:上午10:45:54
 * 项目版本:V1.0
 */
package com.you.example;

import java.math.BigDecimal;

/**
 * 文件名称:BigDecimals.java
 * 文件类型:BigDecimals
 * 文件包名:com.you.example
 * 创建作者:游海东
 * 创建日期:2017-1-11
 * 创建时间:上午10:45:54
 */
public class BigDecimals {

	/**
	 * 方法描述:
	 * 创建作者:游海东
	 * 创建日期:2017-1-11
	 * 创建时间:上午10:45:54
	 * 方法名称:main
	 * 方法类型:BigDecimals
	 * 返回类型:void
	 * @param args
	 */
	public static void main(String[] args) {
		BigDecimal a = new BigDecimal(200);
		BigDecimal b = new BigDecimal(3);
		System.out.println(a.divide(b));
	}

}
     BigDecimal 在做除法运算时,遇到无限循环小数,会报这个错误


3、解决办法

      BigDecimal 做除法需要对小数进行四舍五入

/**
 *
 * 项目名称:DABF
 * 项目包名:com.you.example
 * 文件名称:BigDecimal.java
 * 类型名称:BigDecimal
 * 创建作者:游海东
 * 创建日期:2017-1-11
 * 创建时间:上午10:45:54
 * 项目版本:V1.0
 */
package com.you.example;

import java.math.BigDecimal;

/**
 * 文件名称:BigDecimal.java
 * 文件类型:BigDecimal
 * 文件包名:com.you.example
 * 创建作者:游海东
 * 创建日期:2017-1-11
 * 创建时间:上午10:45:54
 */
public class BigDecimals {

	/**
	 * 方法描述:
	 * 创建作者:游海东
	 * 创建日期:2017-1-11
	 * 创建时间:上午10:45:54
	 * 方法名称:main
	 * 方法类型:BigDecimal
	 * 返回类型:void
	 * @param args
	 */
	public static void main(String[] args) {
		BigDecimal a = new BigDecimal(200);
		BigDecimal b = new BigDecimal(3);
		System.out.println(a.divide(b,2,BigDecimal.ROUND_HALF_UP));
	}

}



原文地址:https://www.cnblogs.com/hzcya1995/p/13313980.html