package com.newcoder.pat;
import java.math.BigDecimal;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
BigDecimal a = new BigDecimal(Double.toString((double)sc.nextInt()));
BigDecimal b = new BigDecimal(Double.toString((double)sc.nextInt()));
int n = sc.nextInt();
a = a.divide(b);
System.out.println(a.toString());
}
}
}
运行时报的错误如下所示:
Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
at java.base/java.math.BigDecimal.divide(BigDecimal.java:1722)
at com.newcoder.pat.Main.main(Main.java:14)
错误原因:在运行第14行代码a = a.divide(b);
时,给的数据是a = 1 / 3
,此时得到的是一个无穷小数,这个时候就需要定义计算结果要保留到小数点后几位,否则就会抛出上面的异常。
修改如下:
a = a.divide(b,n,BigDecimal.ROUND_FLOOR);
// scale为保留第scale位小数
// roundingMode为舍入模式
divide(BigDecimal divisor, int scale, int roundingMode)