Arithmetic Operations
Implementations of MonetaryAmount
are required to be immutable and as such those operations will create new instances holding the result when applied without mutating the original instance.
public class ArithmeticOperations {
public static void main(String[] args) {
CurrencyUnit currency = Monetary.getCurrency("BRL");
MonetaryAmount money = Money.of(BigDecimal.TEN, currency);
MonetaryAmount money2 = FastMoney.of(BigDecimal.TEN, currency);
MonetaryAmount addResult = money.add(money2);//BRL 20 Money implementation
MonetaryAmount subtractResult = money2.subtract(addResult);//BRL -10 FastMoney implementation
}
}
To do multiplication or division, a remainder operation is necessary to pass a Number
instance parameter.
public class ArithmeticOperations2 {
public static void main(String[] args) {
CurrencyUnit currency = Monetary.getCurrency("BRL");
MonetaryAmount money = Money.of(100, currency);
Number number = 20;
MonetaryAmount divideResult = money.divide(number);//BRL 5
MonetaryAmount remainderResult = money.remainder(30);//BRL 10
MonetaryAmount resultMultiply = money.multiply(5);//BRL 500
}
}
Also, it is possible to do an operation just using signs on MonetaryAmount
.
public class ArithmeticOperations3 {
public static void main(String[] args) {
CurrencyUnit currency = Monetary.getCurrency("BRL");
MonetaryAmount money = Money.of(100, currency);
MonetaryAmount negateResult = money.negate();//BRL -100
MonetaryAmount plusResult = money.plus();//BRL 100
}
}