@Override public MonetaryAmountFactory<? extends MonetaryAmount> getFactory() { return money.getFactory(); }
@Override public MonetaryAmountFactory<? extends MonetaryAmount> getFactory() { return money.getFactory(); }
@Override public MonetaryAmountFactory<? extends MonetaryAmount> getFactory() { return money.getFactory(); }
@Override public MonetaryAmount apply(MonetaryAmount amount) { Objects.requireNonNull(amount, "Amount required."); return amount.getFactory().setCurrency(currency).create(); }
@Override public MonetaryAmount apply(MonetaryAmount value) { return value.getFactory().setCurrency(term).create(); }
@Override public MonetaryAmount apply(MonetaryAmount value) { return value.getFactory() .setNumber(value.getNumber().numberValue(BigDecimal.class).setScale(2, RoundingMode.DOWN)) .create(); } };
@Override public MonetaryAmount apply(MonetaryAmount value) { return value.multiply(2).getFactory().setCurrency(TERM).create(); } };
@Override public MonetaryAmount apply(MonetaryAmount value) { return value.getFactory() .setNumber(value.getNumber().numberValue(BigDecimal.class).setScale(1, RoundingMode.DOWN)) .create(); } };
@Override public MonetaryAmount apply(MonetaryAmount value) { return value.getFactory() .setNumber(value.getNumber().numberValue(BigDecimal.class).setScale(0, RoundingMode.HALF_EVEN)) .create(); } });
@Override public MonetaryAmount apply(MonetaryAmount amount) { Objects.requireNonNull(amount, "Amount required."); CurrencyUnit currency = amount.getCurrency(); int scale = scaleOptional.orElse(currency.getDefaultFractionDigits()); BigDecimal value = amount.getNumber().numberValue(BigDecimal.class).setScale(scale, roundingMode); return amount.getFactory().setNumber(value).create(); }
@Override public MonetaryAmount apply(MonetaryAmount value) { return value.getFactory().setNumber( value.getNumber().numberValue(BigDecimal.class).setScale(2, RoundingMode.UP)) .create(); } };
@Override public MonetaryAmount apply(MonetaryAmount value) { return value.getFactory() .setNumber(value.getNumber().numberValue(BigDecimal.class).setScale(4, RoundingMode.UP)) .create(); } };
@Override public MonetaryAmount apply(MonetaryAmount value) { return value.multiply(FACTOR).getFactory().setCurrency(term).create(); }
@Override public MonetaryAmount apply(MonetaryAmount value) { return value.multiply(FACTOR).getFactory().setCurrency(term).create(); }
@Override public MonetaryAmount apply(MonetaryAmount value) { return value.multiply(FACTOR).getFactory().setCurrency(term).create(); }
/** * Gets the amount as reciprocal / multiplicative inversed value (1/n). * <p> * E.g. 'EUR 2.0' will be converted to 'EUR 0.5'. * * @return the reciprocal / multiplicative inversed of the amount * @throws ArithmeticException if the arithmetic operation failed */ @Override public MonetaryAmount apply(MonetaryAmount amount){ Objects.requireNonNull(amount, "Amount required."); NumberValue num = amount.getNumber(); BigDecimal one = new BigDecimal("1.0").setScale(num.getScale() < 5 ? 5 : num.getScale(), BigDecimal.ROUND_HALF_EVEN); return amount.getFactory().setNumber(one.divide(num.numberValue(BigDecimal.class), RoundingMode.HALF_EVEN)) .create(); }
/** * Gets the minor part of a {@code MonetaryAmount} with the same scale. * <p> * This returns the monetary amount in terms of the minor units of the * currency, truncating the whole part if necessary. For example, 'EUR 2.35' * will return 'EUR 0.35', and 'BHD -1.345' will return 'BHD -0.345'. * <p> * This is returned as a {@code MonetaryAmount} rather than a * {@code BigDecimal} . This is to allow further calculations to be * performed on the result. Should you need a {@code BigDecimal}, simply * call {@code asType(BigDecimal.class)}. * * @return the minor units part of the amount, never {@code null} */ @Override public MonetaryAmount apply(MonetaryAmount amount){ Objects.requireNonNull(amount, "Amount required."); BigDecimal number = amount.getNumber().numberValue(BigDecimal.class); BigDecimal wholes = number.setScale(0, RoundingMode.DOWN); return amount.subtract(amount.getFactory().setNumber(wholes).create()); }
@Override public MonetaryAmount apply(MonetaryAmount amount) { return amount.getFactory().setCurrency(amount.getCurrency()).setNumber( amount.getNumber().numberValue(BigDecimal.class) .setScale(this.context.getInt(SCALE_KEY), this.context.get(RoundingMode.class))).create(); }
return amount.getFactory().setCurrency(amount.getCurrency()) .setNumber(BigDecimal.valueOf(minors).movePointLeft(scale)).create();
/** * Method that converts the source {@link MonetaryAmount} to an * {@link MonetaryAmount} based on the {@link ExchangeRate} of this * conversion. * @param amount The source amount * @return The converted amount, never null. * @throws CurrencyConversionException if conversion failed, or the required data is not available. * @see #getExchangeRate(MonetaryAmount) */ @Override public MonetaryAmount apply(MonetaryAmount amount) { if (termCurrency.equals(Objects.requireNonNull(amount).getCurrency())) { return amount; } ExchangeRate rate = getExchangeRate(amount); if (Objects.isNull(rate) || !amount.getCurrency().equals(rate.getBaseCurrency())) { throw new CurrencyConversionException(amount.getCurrency(), this.termCurrency, null); } NumberValue factor = rate.getFactor(); factor = roundFactor(amount, factor); Integer scale = rate.getContext().get(KEY_SCALE, Integer.class); if(Objects.isNull(scale) || scale < 0) { return amount.multiply(factor).getFactory().setCurrency(rate.getCurrency()).create(); } else { return amount.multiply(factor).getFactory().setCurrency(rate.getCurrency()).create().with(MonetaryOperators.rounding(scale)); } }