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
MonetaryAmountthat 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.