jsr354-api icon indicating copy to clipboard operation
jsr354-api copied to clipboard

MonetaryAmount.stripTrailingZeros() is confusing

Open marschall opened this issue 6 years ago • 3 comments

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 to javax.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 for org.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();

marschall avatar Jan 06 '19 12:01 marschall

That's not for now, it could be a possible deprecation / refactoring in new releases.

keilw avatar Jan 06 '19 15:01 keilw

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.

marschall avatar Jan 08 '19 08:01 marschall

Maybe it could be configured but only in a future version.

keilw avatar Jan 08 '19 12:01 keilw