Code/Functions/Mathematical/CeilingFunction.cs
using Expressive.Expressions;
using System;

namespace Expressive.Functions.Mathematical
{
    internal class CeilingFunction : FunctionBase
    {
        #region FunctionBase Members

        public override string Name { get { return "Ceiling"; } }

        public override object Evaluate(IExpression[] parameters, Context context)
        {
            this.ValidateParameterCount(parameters, 1, 1);

            var value = parameters[0].Evaluate(Variables);

            if (value is double)
            {
                return Math.Ceiling((double)value);
            }
            else if (value is decimal)
            {
                return Math.Ceiling((decimal)value);
            }
            return Math.Ceiling(Convert.ToDouble(value));
        }

        #endregion
    }
}