code: public BigMoney multiplyRetainScale(BigDecimal valueToMultiplyBy, RoundingMode roundingMode) {
          MoneyUtils.checkNotNull(valueToMultiplyBy, "Multiplier must not be null");
          MoneyUtils.checkNotNull(roundingMode, "RoundingMode must not be null");
          if (valueToMultiplyBy.compareTo(BigDecimal.ONE) == 0) {
              return this;
          }
          BigDecimal newAmount = amount.multiply(valueToMultiplyBy);
          newAmount = newAmount.setScale(getScale(), roundingMode);
          return BigMoney.of(currency, newAmount);
      }
docs: Returns a copy of this monetary value multiplied by the specified value
  using the specified rounding mode to adjust the scale of the result.
  <p>
  This multiplies this money by the specified value, retaining the scale of this money.
  This will frequently lose precision, hence the need for a rounding mode.
  For example, 'USD 1.13' multiplied by '2.5' and rounding down gives 'USD 2.82'.
  <p>
  This instance is immutable and unaffected by this method.
  
  @param valueToMultiplyBy  the scalar value to multiply by, not null
  @param roundingMode  the rounding mode to use to bring the decimal places back in line, not null
  @return the new multiplied instance, never null
  @throws ArithmeticException if the rounding fails