
net.yapbam.util.BigDecimalEvaluator Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of yapbam-commons Show documentation
Show all versions of yapbam-commons Show documentation
Commons Yapbam classes used by desktop and Android versions.
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