public void TestRounding()
 {
     Assert.AreEqual(3.00, RoundingHelper.Round(3.249));
     Assert.AreEqual(3.50, RoundingHelper.Round(3.25));
     Assert.AreEqual(3.50, RoundingHelper.Round(3.6));
     Assert.AreEqual(4.00, RoundingHelper.Round(3.75));
 }
예제 #2
0
        public void FloorShouldReturnCorrectResult_AlwaysDown()
        {
            var result = RoundingHelper.Round(26.75, 0.1, RoundingHelper.Direction.AlwaysDown);

            Assert.AreEqual(26.7, result);

            result = RoundingHelper.Round(26.75, 0.5, RoundingHelper.Direction.AlwaysDown);
            Assert.AreEqual(26.5, result);

            result = RoundingHelper.Round(26.75, 1, RoundingHelper.Direction.AlwaysDown);
            Assert.AreEqual(26, result);

            result = RoundingHelper.Round(26.75, 10, RoundingHelper.Direction.AlwaysDown);
            Assert.AreEqual(20, result);

            result = RoundingHelper.Round(26.75, 0, RoundingHelper.Direction.AlwaysDown);
            Assert.AreEqual(0, result);

            result = RoundingHelper.Round(-26.25, -0.5, RoundingHelper.Direction.AlwaysDown);
            Assert.AreEqual(-26.5, result);

            result = RoundingHelper.Round(-26.75, 1, RoundingHelper.Direction.AlwaysDown);
            Assert.AreEqual(-27, result);

            result = RoundingHelper.Round(-26.75, -1, RoundingHelper.Direction.AlwaysDown);
            Assert.AreEqual(-27, result);

            result = RoundingHelper.Round(-26.75, 5, RoundingHelper.Direction.AlwaysDown);
            Assert.AreEqual(-30, result);
        }
예제 #3
0
        public void FloorShouldReturnCorrectResult_Down()
        {
            var result = RoundingHelper.Round(26.75, 0.1, RoundingHelper.Direction.Down);

            Assert.AreEqual(26.7, result);

            result = RoundingHelper.Round(26.75, 0.5, RoundingHelper.Direction.Down);
            Assert.AreEqual(26.5, result);

            result = RoundingHelper.Round(26.75, 1, RoundingHelper.Direction.Down);
            Assert.AreEqual(26, result);

            result = RoundingHelper.Round(26.75, 10, RoundingHelper.Direction.Down);
            Assert.AreEqual(20, result);

            result = RoundingHelper.Round(26.75, 20, RoundingHelper.Direction.Down);
            Assert.AreEqual(20, result);

            result = RoundingHelper.Round(-26.75, -0.1, RoundingHelper.Direction.Down);
            Assert.AreEqual(-26.7, result);

            result = RoundingHelper.Round(-26.75, -1, RoundingHelper.Direction.Down);
            Assert.AreEqual(-26, result);

            result = RoundingHelper.Round(-26.75, -5, RoundingHelper.Direction.Down);
            Assert.AreEqual(-25, result);

            result = RoundingHelper.Round(555, 1000, RoundingHelper.Direction.Down);
            Assert.AreEqual(0, result);

            result = RoundingHelper.Round(-555, -1000, RoundingHelper.Direction.Down);
            Assert.AreEqual(0, result);
        }
예제 #4
0
        public void CeilingShouldReturnCorrectResult()
        {
            var result = RoundingHelper.Round(22.25, 0.1, RoundingHelper.Direction.Up);

            Assert.AreEqual(22.3, result);

            result = RoundingHelper.Round(22.25, 0.5, RoundingHelper.Direction.Up);
            Assert.AreEqual(22.5, result);

            result = RoundingHelper.Round(22.25, 1, RoundingHelper.Direction.Up);
            Assert.AreEqual(23, result);

            result = RoundingHelper.Round(22.25, 10, RoundingHelper.Direction.Up);
            Assert.AreEqual(30, result);

            result = RoundingHelper.Round(22.25, 20, RoundingHelper.Direction.Up);
            Assert.AreEqual(40, result);

            result = RoundingHelper.Round(-22.25, -0.1, RoundingHelper.Direction.Up);
            Assert.AreEqual(-22.3, result);

            result = RoundingHelper.Round(-22.25, -1, RoundingHelper.Direction.Up);
            Assert.AreEqual(-23, result);

            result = RoundingHelper.Round(-22.25, -5, RoundingHelper.Direction.Up);
            Assert.AreEqual(-25, result);

            result = RoundingHelper.Round(555, 1000, RoundingHelper.Direction.Up);
            Assert.AreEqual(1000, result);

            result = RoundingHelper.Round(-555, -1000, RoundingHelper.Direction.Up);
            Assert.AreEqual(-1000, result);
        }
예제 #5
0
        public void CeilingShouldReturnCorrectResult_AlwaysUp()
        {
            var result = RoundingHelper.Round(22.25, 0.1, RoundingHelper.Direction.AlwaysUp);

            Assert.AreEqual(22.3, result);

            result = RoundingHelper.Round(22.25, 0.5, RoundingHelper.Direction.AlwaysUp);
            Assert.AreEqual(22.5, result);

            result = RoundingHelper.Round(22.25, -0.5, RoundingHelper.Direction.AlwaysUp);
            Assert.AreEqual(22.5, result);

            result = RoundingHelper.Round(22.25, 1, RoundingHelper.Direction.AlwaysUp);
            Assert.AreEqual(23, result);

            result = RoundingHelper.Round(22.25, 10, RoundingHelper.Direction.AlwaysUp);
            Assert.AreEqual(30, result);

            result = RoundingHelper.Round(22.25, 0, RoundingHelper.Direction.AlwaysUp);
            Assert.AreEqual(0, result);

            result = RoundingHelper.Round(-22.25, -0.5, RoundingHelper.Direction.AlwaysUp);
            Assert.AreEqual(-22, result);

            result = RoundingHelper.Round(-22.25, 1, RoundingHelper.Direction.AlwaysUp);
            Assert.AreEqual(-22, result);

            result = RoundingHelper.Round(-22.25, -1, RoundingHelper.Direction.AlwaysUp);
            Assert.AreEqual(-22, result);

            result = RoundingHelper.Round(-22.25, 5, RoundingHelper.Direction.AlwaysUp);
            Assert.AreEqual(-20, result);
        }
예제 #6
0
        public void RoundingsTest(decimal value, decimal rounded)
        {
            //arrange & act
            var result = RoundingHelper.Round(value, 2);

            //assert
            Assert.Equal(rounded, result);
        }
        /// <summary>
        /// Generates ticks for given range and preferred ticks count.
        /// </summary>
        /// <param name="range">The range.</param>
        /// <param name="ticksCount">The ticks count.</param>
        /// <returns></returns>
        public ITicksInfo <int> GetTicks(Range <int> range, int ticksCount)
        {
            double start  = range.Min;
            double finish = range.Max;

            double delta = finish - start;

            int log = (int)Math.Round(Math.Log10(delta));

            double newStart  = RoundingHelper.Round(start, log);
            double newFinish = RoundingHelper.Round(finish, log);

            if (newStart == newFinish)
            {
                log--;
                newStart  = RoundingHelper.Round(start, log);
                newFinish = RoundingHelper.Round(finish, log);
            }

            // calculating step between ticks
            double unroundedStep = (newFinish - newStart) / ticksCount;
            int    stepLog       = log;
            // trying to round step
            int step = (int)RoundingHelper.Round(unroundedStep, stepLog);

            if (step == 0)
            {
                stepLog--;
                step = (int)RoundingHelper.Round(unroundedStep, stepLog);
                if (step == 0)
                {
                    // step will not be rounded if attempts to be rounded to zero.
                    step = (int)unroundedStep;
                }
            }

            if (step < minStep)
            {
                step = minStep;
            }
            if (step > maxStep)
            {
                step = maxStep;
            }

            if (step <= 0)
            {
                step = 1;
            }

            int[] ticks = CreateTicks(start, finish, step);

            TicksInfo <int> res = new TicksInfo <int> {
                Info = log, Ticks = ticks
            };

            return(res);
        }
        protected override bool IsValid(PropertyValidatorContext context)
        {
            decimal value;

            if (decimal.TryParse(context.PropertyValue.ToString(), out value))
            {
                return(RoundingHelper.Round(value, RoundingType.Rounding001) < _maxValue);
            }
            return(false);
        }
예제 #9
0
        public void Round3Test()
        {
            //arrange
            var value = 169.56585m;

            //act
            var roundedValue = RoundingHelper.Round(value, 2);

            //assert
            Assert.Equal(169.57m, roundedValue);
        }
예제 #10
0
        public void NearestRoundingTest()
        {
            var result = RoundingHelper.Round(22.24, 0.1, RoundingHelper.Direction.Nearest);

            Assert.AreEqual(22.2, result);

            result = RoundingHelper.Round(22.25, 0.1, RoundingHelper.Direction.Nearest);
            Assert.AreEqual(22.3, result);

            result = RoundingHelper.Round(22.26, 0.1, RoundingHelper.Direction.Nearest);
            Assert.AreEqual(22.3, result);

            result = RoundingHelper.Round(-22.25, -0.1, RoundingHelper.Direction.Nearest);
            Assert.AreEqual(-22.3, result);

            result = RoundingHelper.Round(-22.24, -0.1, RoundingHelper.Direction.Nearest);
            Assert.AreEqual(-22.2, result);

            result = RoundingHelper.Round(333.8, 1, RoundingHelper.Direction.Nearest);
            Assert.AreEqual(334, result);

            result = RoundingHelper.Round(333.3, 1, RoundingHelper.Direction.Nearest);
            Assert.AreEqual(333, result);

            result = RoundingHelper.Round(333.3, 2, RoundingHelper.Direction.Nearest);
            Assert.AreEqual(334, result);

            result = RoundingHelper.Round(555.3, 400, RoundingHelper.Direction.Nearest);
            Assert.AreEqual(400, result);

            result = RoundingHelper.Round(555, 1000, RoundingHelper.Direction.Nearest);
            Assert.AreEqual(1000, result);

            result = RoundingHelper.Round(-555.7, -1, RoundingHelper.Direction.Nearest);
            Assert.AreEqual(-556, result);

            result = RoundingHelper.Round(-555.4, -1, RoundingHelper.Direction.Nearest);
            Assert.AreEqual(-555, result);

            result = RoundingHelper.Round(-1555, -1000, RoundingHelper.Direction.Nearest);
            Assert.AreEqual(-2000, result);
        }
예제 #11
0
        public static void UpdateFloatingRateDefinition(FloatingRateDefinition floatingRateDefinition,
                                                        FloatingRateCalculation floatingRateCalculation,
                                                        DayCountFraction dayCountFraction,
                                                        CalculationPeriod calculationPeriod,
                                                        IRateCurve forecastCurve)
        {
            var rateObservation = new RateObservation();

            if (floatingRateDefinition.rateObservation != null)
            {
                if (floatingRateDefinition.rateObservation[0].adjustedFixingDateSpecified)
                {
                    rateObservation.adjustedFixingDate          = floatingRateDefinition.rateObservation[0].adjustedFixingDate;
                    rateObservation.adjustedFixingDateSpecified = true;
                }
            }
            floatingRateDefinition.rateObservation = new[] { rateObservation };
            rateObservation.forecastRate           = GetForecastRate(calculationPeriod, forecastCurve, dayCountFraction);
            rateObservation.forecastRateSpecified  = true;
            Decimal finalRate = rateObservation.forecastRate;

            // If spread specified - add it to the final rate.
            //
            if (floatingRateDefinition.spreadSpecified)
            {
                finalRate += floatingRateDefinition.spread;
            }
            // Apply rounding (if it's been specified)
            //
            if (null != floatingRateCalculation.finalRateRounding)
            {
                Rounding finalRateRounding = floatingRateCalculation.finalRateRounding;
                floatingRateDefinition.calculatedRate = RoundingHelper.Round(finalRate, finalRateRounding);
            }
            else
            {
                floatingRateDefinition.calculatedRate = finalRate;
            }
            floatingRateDefinition.calculatedRateSpecified = true;
        }