예제 #1
0
        public static string Description(MoneyRoundingMode roundMode)
        {
            switch (roundMode)
            {
                case MoneyRoundingMode.RoundUp:
                    return "Up";

                case MoneyRoundingMode.RoundDown:
                    return "Down";

                case MoneyRoundingMode.RoundNearest:
                    return "Nearest";

                default:
                    return "Unknown";
            }
        }
예제 #2
0
        public static decimal Round(MoneyRoundingMode mode, decimal roundingTo, decimal value)
        {
            if (mode == MoneyRoundingMode.NoRounding) return value;
            if (roundingTo == 0M) return value;

            decimal roundedValue = value;

            decimal fromFloor = value % roundingTo;
            decimal toCeiling = roundingTo - fromFloor;

            if (toCeiling == roundingTo) toCeiling = 0.0M;

            switch (mode)
            {
                case MoneyRoundingMode.RoundUp:
                    roundedValue += toCeiling;
                    break;

                case MoneyRoundingMode.RoundDown:
                    roundedValue -= fromFloor;
                    break;

                case MoneyRoundingMode.RoundNearest:
                    if (fromFloor < toCeiling)
                    {
                        roundedValue -= fromFloor;
                    }
                    else
                    {
                        roundedValue += toCeiling;
                    }
                    break;

                default:
                    throw new InvalidOperationException(string.Format(
                        "The rounding mode \"{0}\" has not been added to the ApplyFinalRounding method in the rate charging system.",
                        mode));
            }

            return roundedValue;
        }