All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.yapbam.util.BigDecimalEvaluator Maven / Gradle / Ivy

There is a newer version: 1.9.1
Show newest version
package net.yapbam.util;

import java.math.BigDecimal;
import java.math.MathContext;
import java.util.Iterator;

import com.fathzer.soft.javaluator.AbstractEvaluator;
import com.fathzer.soft.javaluator.BracketPair;
import com.fathzer.soft.javaluator.DoubleEvaluator;
import com.fathzer.soft.javaluator.Operator;
import com.fathzer.soft.javaluator.Parameters;

public class BigDecimalEvaluator extends AbstractEvaluator {
	private static final Parameters PARAMS;
	
	static {
		PARAMS = new Parameters();
		PARAMS.addExpressionBracket(BracketPair.PARENTHESES);
		PARAMS.add(DoubleEvaluator.NEGATE);
		PARAMS.add(DoubleEvaluator.MINUS);
		PARAMS.add(DoubleEvaluator.PLUS);
		PARAMS.add(DoubleEvaluator.MULTIPLY);
		PARAMS.add(DoubleEvaluator.DIVIDE);
	}

	private MathContext mathContext;

	public BigDecimalEvaluator(MathContext context) {
		super(PARAMS);
		this.mathContext = context;
	}

	@Override
	protected BigDecimal toValue(String literal, Object evaluationContext) {
		try {
			return new BigDecimal(literal);
		} catch (NumberFormatException e) {
			throw new IllegalArgumentException();
		}
	}

	/* (non-Javadoc)
	 * @see net.astesana.javaluator.AbstractEvaluator#evaluate(net.astesana.javaluator.Operator, java.util.Iterator, java.lang.Object)
	 */
	@Override
	protected BigDecimal evaluate(Operator operator, Iterator operands, Object evaluationContext) {
		if (operator.equals(DoubleEvaluator.NEGATE)) {
			return operands.next().negate();
		} else {
			BigDecimal ope1 = operands.next();
			BigDecimal ope2 = operands.next();
			if (operator.equals(DoubleEvaluator.MINUS)) {
				return ope1.subtract(ope2);
			} else if (operator.equals(DoubleEvaluator.PLUS)) {
				return ope1.add(ope2);
			} else if (operator.equals(DoubleEvaluator.MULTIPLY)) {
				return ope1.multiply(ope2);
			} else if (operator.equals(DoubleEvaluator.DIVIDE)) {
				return ope1.divide(ope2, mathContext);
			}
		}
		return super.evaluate(operator, operands, evaluationContext);
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy