Non-terminating decimal expansion; no exact representable decimal result.
时间: 2023-10-19 22:31:11 浏览: 187
在进行浮点数运算或者使用BigDecimal进行除法运算时,有些数无法被精确表示,因为它们的十进制小数位是无限循环的,例如1/3,0.1等。在这种情况下,运算结果也无法被精确表示,因为它们的十进制小数位也会是无限循环的。
在Java中,如果进行了这种运算,会抛出`ArithmeticException`异常,异常信息为"Non-terminating decimal expansion; no exact representable decimal result.",表示运算结果无法被精确表示为一个有限小数。
例如,下面的代码会抛出该异常:
```java
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal dividend = new BigDecimal("1");
BigDecimal divisor = new BigDecimal("3");
BigDecimal result = dividend.divide(divisor);
System.out.println(result);
}
}
```
输出结果为:
```
Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
at java.math.BigDecimal.divide(BigDecimal.java:1697)
at Main.main(Main.java:6)
```
要解决这个问题,可以使用`setScale()`方法将结果舍入到指定的小数位数,例如:
```java
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
BigDecimal dividend = new BigDecimal("1");
BigDecimal divisor = new BigDecimal("3");
BigDecimal result = dividend.divide(divisor, 3, RoundingMode.HALF_UP);
System.out.println(result);
}
}
```
输出结果为:
```
0.333
```
在这个例子中,我们使用`setScale()`方法将结果舍入到小数点后3位,并使用`RoundingMode.HALF_UP`模式进行舍入,得到了一个近似值。
阅读全文