code: public BigMoney multiplyRetainScale(double valueToMultiplyBy, RoundingMode roundingMode) {
          return multiplyRetainScale(BigDecimal.valueOf(valueToMultiplyBy), roundingMode);
      }
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>
  The amount is converted via {@link BigDecimal#valueOf(double)} which yields
  the most expected answer for most programming scenarios.
  Any {@code double} literal in code will be converted to
  exactly the same BigDecimal with the same scale.
  For example, the literal '1.45d' will be converted to '1.45'.
  <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