当前位置: 首页 > 知识库问答 >
问题:

BigDecimal-算术异常,即使有精确的可表示结果

盖成弘
2023-03-14
BigDecimal bd1 = new BigDecimal(8757).divide(new BigDecimal(12));

我得到以下例外:

Caused by: java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.

为什么会这样?除法的结果应该是729.75,它有一个终止的十进制扩展(.75)。

共有1个答案

傅阳
2023-03-14

我找到了问题所在,实际执行的代码如下:

public class ClassA {   
    public static final BigDecimal BD2= new BigDecimal(12);
}

public ClassB {
    public static final BigDecimal BD1 = new BigDecimal(8757);
    public static final BigDecimal RESULT = BD1.divide(ClassA.BD2);
}

BD2没有初始化时调用分()方法(我检查了使用断点)。但是,我仍然认为有一个错误,因为它不应该抛出这个异常在这种情况下,这是完全无关的正在发生的事情。我猜BD2是null时,分()被调用。

 类似资料:
  • 我参考了这一点,并对值进行了四舍五入,然后我也得到了上述错误。请查找下面提到的代码。提前感谢:

  • 为什么下面的代码会引发如下所示的异常? 例外情况:

  • 代码: 当我输入十进制值时,它抛出一个异常:线程“主”中的异常java.lang.算术异常:非终止十进制扩展;没有确切的可表示的十进制结果。

  • 嗨大家好, 我的JDK版本是8u45,现在是最新的。 我想知道“最后一个例外的精确重演”在SE 8中仍然有效吗? 作为代码,如果我去掉“抛出异常”,这将是编译错误,但根据SE7的“最终异常精确重试”函数,应该可以忽略它。 另一个问题是,我们都知道如果嵌套的try框中发生了异常,我们仍然应该将其抛出到外部捕获框以避免编译错误,我最初认为我们只需要抛出任何类型的异常 但是如果我像下面的代码那样修改它:

  • 问题内容: 当我使用math.cos()和math.sin()函数时,我的python解释器表现得很时髦。例如,如果我在计算器上执行此操作: 但是当我在python(3.2和2.7)上执行此操作时 为什么会这样? 编辑:为了以防万一,您如何将Python中的弧度更改为度数? 问题答案: 这是由于您正在使用 度数 ,并且三角函数期望 弧度 作为输入而引起的: 的描述是: 在Python中,您可以使用

  • 问题内容: 我正在生成要显示在折线图中的数据。不幸的是,我无法弄清楚如何使上面的查询显示0来表示没有用户注册的日期。所以目前我的输出可能是这样的: 但是我想要的是 我目前确实有一个工作版本,该版本将MySQL结果存储到数组中,然后PHP循环遍历并填补空白。这似乎很混乱,我希望可以通过MySQL解决方案。我已经对该站点进行了很好的搜索,但是努力了解一些实现。有什么建议么? 问题答案: 您可以使用My