jsr354-api
jsr354-api copied to clipboard
MonetaryAmount.stripTrailingZeros() is confusing
javax.money.MonetaryAmount#stripTrailingZeros()
is confusing for two reasons:
- It seems to be the only method left on
MonetaryAmount
that operates on the number value.#getAmountWhole()
has been removed and#getAmountFractionNumerator()
and#getAmountFractionDenominator()
have been moved tojavax.money.NumberValue
. - It assumes the implementation has an adjustable scale like
BigDecimal
/org.javamoney.moneta.Money
. It is unspecified that should happen in cases where the scale is fixed like fororg.javamoney.moneta.FastMoney
.
It could either be moved to javax.money.NumberValue
like #getAmountFractionNumerator()
and #getAmountFractionDenominator()
or a user could simply do
money.getFactory()
.setNumber(money.getNumber().numberValueExact(BigDecimal.class).stripTrailingZeros())
.create();
That's not for now, it could be a possible deprecation / refactoring in new releases.
I understand that changing the ABI may not be an option. What would be nice if we could formalise / specify the behaviour for implementations with a fixed scale.
Maybe it could be configured but only in a future version.