Pchp.Library.PhpMath.RoundInternal C# (CSharp) Method

RoundInternal() private static method

private static RoundInternal ( double value, RoundMode mode ) : double
value double
mode RoundMode
return double
        private static double RoundInternal(double value, RoundMode mode)
        {
            double tmp_value;

            if (value >= 0.0)
            {
                tmp_value = Math.Floor(value + 0.5);
                if (mode != RoundMode.HalfUp)
                {
                    if ((mode == RoundMode.HalfDown && value == (-0.5 + tmp_value)) ||
                        (mode == RoundMode.HalfEven && value == (0.5 + 2 * Math.Floor(tmp_value * .5))) ||
                        (mode == RoundMode.HalfOdd && value == (0.5 + 2 * Math.Floor(tmp_value * .5) - 1.0)))
                    {
                        tmp_value = tmp_value - 1.0;
                    }
                }
            }
            else
            {
                tmp_value = Math.Ceiling(value - 0.5);
                if (mode != RoundMode.HalfUp)
                {
                    if ((mode == RoundMode.HalfDown && value == (0.5 + tmp_value)) ||
                        (mode == RoundMode.HalfEven && value == (-0.5 + 2 * Math.Ceiling(tmp_value * .5))) ||
                        (mode == RoundMode.HalfOdd && value == (-0.5 + 2 * Math.Ceiling(tmp_value * .5) + 1.0)))
                    {
                        tmp_value = tmp_value + 1.0;
                    }
                }
            }

            return tmp_value;
        }