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"; } }
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; }