package org.matheclipse.core.reflection.system;

import org.matheclipse.core.eval.exception.Validate;
import org.matheclipse.core.eval.interfaces.AbstractFunctionEvaluator;
import org.matheclipse.core.expression.F;
import org.matheclipse.core.interfaces.IAST;
import org.matheclipse.core.interfaces.IExpr;
import org.matheclipse.core.interfaces.IFraction;
import org.matheclipse.core.interfaces.INum;

import java.math.BigInteger;

/**
 * Get the fractional part auf a number
 */
public class FractionalPart extends AbstractFunctionEvaluator {

	public FractionalPart() {
	}

	@Override
	public IExpr evaluate(final IAST ast) {
		Validate.checkSize(ast, 2);
		
		IExpr expr = ast.arg1();
		if (expr.isSignedNumber()) {
			if (expr.isInteger()) {
				return F.C0;
			} else if (expr.isFraction()) {
				IFraction fr = (IFraction) expr;
				BigInteger num = fr.getBigNumerator();
				BigInteger den = fr.getBigDenominator();
				BigInteger div = num.divide(den);
				if (div.equals(BigInteger.ZERO)) {
					return F.C0;
				}
				return F.fraction(div, den);
			} else if (expr instanceof INum) {
				// TODO
				// INum num = (INum) expr;
				// num.getRealPart();

			}
		}
		return null;
	}
}
 

Ads help maintain this website.