15

我正在使用 BigDecimal 进行一些计算。最近我遇到了:

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

该问题的答案发布在这里: ArithmeticException:“非终止十进制扩展;没有精确可表示的十进制结果”

这意味着,有一些无限小数的除法,所以 BigDecimal 告诉我它无法准确计算结果。为了避免这种情况,我必须打电话BigDecimal.setScale(SOMETHING, ROUNDING_MODE);

编辑:

现在的问题是将 SOMETHING 设置为最大可能值。我可以使用精度低于 UNLIMITED ( MathContext(precision)) 的 MathContext,但同样的问题也会发生在那里。下面需要一个值 MathContext.UNLIMITED...

有谁知道如何做到这一点?

将我的第二个问题移至: 为什么没有 BigDecimal.setPrecision() 方法?

谢谢!

奥利弗

4

2 回答 2

4

第一个问题:没有BigDecimal.UNLIMITED. 这没有任何意义。比无穷小一是多少?因为文档没有明确提到 BigDecimal 的默认 MathContext,所以我必须假设它是MathContext.UNLIMITED. 看到你有一个重复的小数,aBigDecimal不能保持它,即使有无限的精度。相反,您需要任意选择一个值(例如 100 或 1000 - 我不知道您将这些数字用于什么目的)。如果你只关心第一个,比如 15 位小数,那么如果你跟踪第一个,比如 100,你就不应该有舍入错误。

第二个问题:问一个单独的问题。

于 2013-08-07T15:20:20.733 回答
0

BigDecimal.setScale以 anint作为参数。所以最大可能的规模是

2,147,483,647

但如上所述,您不应该使用如此巨大的秤。您正在计算的数字会占用大量内存而没有任何用处。计算数字可能需要很长时间。

于 2013-08-07T16:00:58.720 回答