fork download
  1. using System;
  2.  
  3. public class Test
  4. {
  5. public static void Main()
  6. {
  7. for (decimal x = 1 ; x != 2 ; x+=0.01M) {
  8. decimal y = CashRound(x);
  9. Console.WriteLine("{0:0.00} {1:0.00}", x, y);
  10. }
  11. }
  12.  
  13. public static decimal CashRound(decimal value, decimal cents = 0.05m, decimal down = 0.03m, decimal up = 0.08m)
  14. {
  15. var roundedValue = Math.Truncate(value * 100) / 100; // ensure internal value has 2 decimals
  16.  
  17. var modToCents = roundedValue * 100 % (cents * 100) / 100;
  18. if (modToCents == 0)
  19. return roundedValue;
  20.  
  21. if (modToCents < down)
  22. roundedValue -= modToCents;
  23. else if (modToCents < up)
  24. roundedValue += cents - modToCents;
  25. else
  26. roundedValue += modToCents;
  27.  
  28. return roundedValue;
  29. }
  30.  
  31. }
Success #stdin #stdout 0.03s 26608KB
stdin
Standard input is empty
stdout
1.00 1.00
1.01 1.00
1.02 1.00
1.03 1.05
1.04 1.05
1.05 1.05
1.06 1.05
1.07 1.05
1.08 1.10
1.09 1.10
1.10 1.10
1.11 1.10
1.12 1.10
1.13 1.15
1.14 1.15
1.15 1.15
1.16 1.15
1.17 1.15
1.18 1.20
1.19 1.20
1.20 1.20
1.21 1.20
1.22 1.20
1.23 1.25
1.24 1.25
1.25 1.25
1.26 1.25
1.27 1.25
1.28 1.30
1.29 1.30
1.30 1.30
1.31 1.30
1.32 1.30
1.33 1.35
1.34 1.35
1.35 1.35
1.36 1.35
1.37 1.35
1.38 1.40
1.39 1.40
1.40 1.40
1.41 1.40
1.42 1.40
1.43 1.45
1.44 1.45
1.45 1.45
1.46 1.45
1.47 1.45
1.48 1.50
1.49 1.50
1.50 1.50
1.51 1.50
1.52 1.50
1.53 1.55
1.54 1.55
1.55 1.55
1.56 1.55
1.57 1.55
1.58 1.60
1.59 1.60
1.60 1.60
1.61 1.60
1.62 1.60
1.63 1.65
1.64 1.65
1.65 1.65
1.66 1.65
1.67 1.65
1.68 1.70
1.69 1.70
1.70 1.70
1.71 1.70
1.72 1.70
1.73 1.75
1.74 1.75
1.75 1.75
1.76 1.75
1.77 1.75
1.78 1.80
1.79 1.80
1.80 1.80
1.81 1.80
1.82 1.80
1.83 1.85
1.84 1.85
1.85 1.85
1.86 1.85
1.87 1.85
1.88 1.90
1.89 1.90
1.90 1.90
1.91 1.90
1.92 1.90
1.93 1.95
1.94 1.95
1.95 1.95
1.96 1.95
1.97 1.95
1.98 2.00
1.99 2.00