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)); }
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)); }
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)); }
/// <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)); }