code: public BigMoney minusRetainScale(double amountToSubtract, RoundingMode roundingMode) {
          if (amountToSubtract == 0) {
              return this;
          }
          BigDecimal newAmount = amount.subtract(BigDecimal.valueOf(amountToSubtract));
          newAmount = newAmount.setScale(getScale(), roundingMode);
          return BigMoney.of(currency, newAmount);
      }
docs: Returns a copy of this monetary value with the amount subtracted retaining
  the scale by rounding the result.
  <p>
  The scale of the result will be the same as the scale of this instance.
  For example,'USD 25.95' minus '3.029d' gives 'USD 22.92' with most rounding modes.
  <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 amountToSubtract  the monetary value to add, not null
  @param roundingMode  the rounding mode to use to adjust the scale, not null
  @return the new instance with the input amount subtracted, never null