I assume you are asking if it is possible to represent 1 / 22140 exactly as a BigDecimal
. The answer to that is No. The BigDecimal
class cannot represent values with a non-terminating decimal expansion, and there is no simplification of the equation that will allow it.
Q: Why?
A: Basically, mathematics. 1 / 22140 cannot be represented as m * 10s where m and s are finite integers.
There are two practical alternative approaches:
You can use a MathContext
argument when you do the division to specify how to round the number and how much precision to keep; e.g.
c = a.divide(b, new MathContext(100, RoundingMode.HALF_UP));
This will compute the result with 100 decimal digits of precision, rounding (in the conventional way) to the nearest representable value.
Note that this approach gives you inexact results; e.g. (1 / 3) * 3 won't be exactly 1, no matter what you set the precision to in the MathContext
.
You can find and use a 3rd-party Rational
or Fraction
class, or write your own.
Note that Java SE doesn't provide such a class.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…