private static void test01() {
System.out.println("a1= ");
String a1 = new Scanner(System.in).nextLine();
System.out.println("a2 = ");
String a2 = new Scanner(System.in).nextLine();
if(StringUtils.isNotBlank(a1) && !a1.equals("0") && StringUtils.isNotBlank(a2) && !a2.equals("0")) {
BigDecimal b1 = new BigDecimal(a1);
BigDecimal b2 = new BigDecimal(a2);
//double b3 = b1.doubleValue() / b2.doubleValue();
System.out.println("======");
BigDecimal b4 = b1.divide(b2, 2, BigDecimal.ROUND_HALF_UP);
//System.out.println(b1);
//System.out.println(b2);
System.out.println(b4.toString());
}
System.out.println("-------------------------------");
//System.out.println(new BigDecimal(b3).setScale(2,BigDecimal.ROUND_HALF_UP));
//System.out.println(b3.stripTrailingZeros().toPlainString());
}
private static void test02() {
BigDecimal bignum1 = new BigDecimal(“10”);
BigDecimal bignum2 = new BigDecimal(“5”);
BigDecimal bignum3 = null;
//加法
bignum3 = bignum1.add(bignum2);
System.out.println(“和 是:” + bignum3);
//减法
bignum3 = bignum1.subtract(bignum2);
System.out.println(“差 是:” + bignum3);
//乘法
bignum3 = bignum1.multiply(bignum2);
System.out.println(“积 是:” + bignum3);
//除法
bignum3 = bignum1.divide(bignum2);
System.out.println(“商 是:” + bignum3);
}
===================================
java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result异常的解决方法
错误出现在:
b1.divide(b2)
JAVA中如果用BigDecimal做除法的时候一定要在divide方法中传递第二个参数,定义精确到小数点后几位,否则在不整除的情况下,结果是无限循环小数时,就会抛出以上异常。
解决方法:
b1.divide(b2, 2, BigDecimal.ROUND_HALF_UP);
注意这个divide方法有两个重载的方法,一个是传两个参数的,一个是传三个参数的:
两个参数的方法:
@param divisor value by which this {@code BigDecimal} is to be divided. 传入除数
@param roundingMode rounding mode to apply. 传入round的模式
三个参数的方法:
@param divisor value by which this {@code BigDecimal} is to be divided. 传入除数
@param scale scale of the {@code BigDecimal} quotient to be returned. 传入精度
@param roundingMode rounding mode to apply. 传入round的模式