Roman.cs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. using System;
  2. using System.Text;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. namespace FastReport.Functions
  6. {
  7. /// <summary>
  8. /// Based on code of Stefan Böther, xprocs@hotmail.de
  9. /// </summary>
  10. internal static class Roman
  11. {
  12. private static int MAX = 3998;
  13. private static string[,] romanDigits = new string[,] {
  14. {"M", "C", "X", "I" },
  15. {"MM", "CC", "XX", "II" },
  16. {"MMM", "CCC", "XXX", "III" },
  17. {null, "CD", "XL", "IV" },
  18. {null, "D", "L", "V" },
  19. {null, "DC", "LX", "VI" },
  20. {null, "DCC", "LXX", "VII" },
  21. {null, "DCCC", "LXXX", "VIII" },
  22. {null, "CM", "XC", "IX" }};
  23. public static string Convert(int value)
  24. {
  25. if (value > MAX)
  26. throw new ArgumentOutOfRangeException("value");
  27. StringBuilder result = new StringBuilder(15);
  28. for (int index = 0; index < 4; index++)
  29. {
  30. int power = (int)Math.Pow(10, 3 - index);
  31. int digit = value / power;
  32. value -= digit * power;
  33. if (digit > 0)
  34. result.Append(romanDigits[digit - 1, index]);
  35. }
  36. return result.ToString();
  37. }
  38. }
  39. }