* @param y
     * @param a_MathContext
     * @param decimalPlaces
     * @param a_RoundingMode
     * @return x multiplied by y then rounded if necessary
     */
    public static BigDecimal multiplyRoundIfNecessary(
            BigDecimal x,
            BigInteger y,
            MathContext a_MathContext,
            int decimalPlaces,
            RoundingMode a_RoundingMode) {
        // Deal with special cases (x = 0, x = 1, x = -1, y1 = 0, y1 = 1, y1 = -1)?
        // Deal with special cases
        if (x.compareTo(BigDecimal.ONE) == 0) {
            BigDecimal result = new BigDecimal(y.toString());
            return result;
        }
        if (y.compareTo(BigInteger.ONE) == 0) {
            BigDecimal result = new BigDecimal(x.toString());
            if (x.scale() > decimalPlaces) {
                return roundIfNecessary(result, decimalPlaces, a_RoundingMode);
            } else {
                return result;
            }
        }
        if (x.compareTo(BigDecimal.ZERO) == 0) {
            return BigDecimal.ZERO;
        }
        if (y.compareTo(BigInteger.ZERO) == 0) {
            return BigDecimal.ZERO;
        }
        BigDecimal y_BigDecimal = new BigDecimal(y);
        return multiplyRoundIfNecessaryNoSpecialCaseCheck(
                x,
                y_BigDecimal,
                decimalPlaces,
                a_RoundingMode);
    }