Exemplo n.º 1
0
        public override CompileResult Execute(IEnumerable <FunctionArgument> arguments, ParsingContext context)
        {
            ValidateArguments(arguments, 2);
            var number       = ArgToDecimal(arguments, 0, context.Configuration.PrecisionAndRoundingStrategy);
            var significance = ArgToDecimal(arguments, 1);

            if (RoundingHelper.IsInvalidNumberAndSign(number, significance))
            {
                return(CreateResult(eErrorType.Num));
            }
            return(CreateResult(RoundingHelper.Round(number, significance, RoundingHelper.Direction.Up), DataType.Decimal));
        }
Exemplo n.º 2
0
        public override CompileResult Execute(IEnumerable <FunctionArgument> arguments, ParsingContext context)
        {
            ValidateArguments(arguments, 2);
            var number       = ArgToDecimal(arguments, 0);
            var significance = ArgToDecimal(arguments, 1);

            if ((number > 0 && significance < 0) || (number < 0 && significance > 0))
            {
                return(CreateResult(eErrorType.Num));
            }
            return(CreateResult(RoundingHelper.Round(number, significance, RoundingHelper.Direction.Nearest), DataType.Decimal));
        }
Exemplo n.º 3
0
        public override CompileResult Execute(IEnumerable <FunctionArgument> arguments, ParsingContext context)
        {
            ValidateArguments(arguments, 1);
            var number       = ArgToDecimal(arguments, 0);
            var significance = (arguments.Count() > 1) ? ArgToDecimal(arguments, 1) : 1;
            var mode         = (arguments.Count() > 2) ? ArgToDecimal(arguments, 2) : 0d;

            if (RoundingHelper.IsInvalidNumberAndSign(number, significance))
            {
                return(CreateResult(eErrorType.Num));
            }
            return(CreateResult(RoundingHelper.Round(number, significance, mode != 0d ? RoundingHelper.Direction.Up : RoundingHelper.Direction.AlwaysUp), DataType.Decimal));
        }
Exemplo n.º 4
0
 /// <summary>
 /// Rank functions rounds towards zero, i.e. 0.41666666 should be rounded to 0.4166 if 4 decimals.
 /// </summary>
 /// <param name="number">The number to round</param>
 /// <param name="sign">Number of siginicant digits</param>
 /// <returns></returns>
 protected double RoundResult(double number, int sign)
 {
     return(RoundingHelper.RoundToSignificantFig(number, sign, false));
 }