NumToWordsRu.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. using System;
  2. using System.Text;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. namespace FastReport.Functions
  6. {
  7. internal class NumToWordsRu : NumToWordsBase
  8. {
  9. private static Dictionary<string, CurrencyInfo> currencyList;
  10. private static string[] fixedWords =
  11. {
  12. "", "один", "два", "три", "четыре", "пять", "шесть",
  13. "семь", "восемь", "девять", "десять", "одиннадцать",
  14. "двенадцать", "тринадцать", "четырнадцать", "пятнадцать",
  15. "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать"
  16. };
  17. private static string[] tens =
  18. {
  19. "", "десять", "двадцать", "тридцать", "сорок", "пятьдесят",
  20. "шестьдесят", "семьдесят", "восемьдесят", "девяносто"
  21. };
  22. private static string[] hunds =
  23. {
  24. "", "сто", "двести", "триста", "четыреста",
  25. "пятьсот", "шестьсот", "семьсот", "восемьсот", "девятьсот"
  26. };
  27. private static WordInfo thousands = new WordInfo(false, "тысяча", "тысячи", "тысяч");
  28. private static WordInfo millions = new WordInfo(true, "миллион", "миллиона", "миллионов");
  29. private static WordInfo milliards = new WordInfo(true, "миллиард", "миллиарда", "миллиардов");
  30. private static WordInfo trillions = new WordInfo(true, "триллион", "триллиона", "триллионов");
  31. protected override string GetFixedWords(bool male, long value)
  32. {
  33. string result = fixedWords[value];
  34. if (!male)
  35. {
  36. if (value == 1)
  37. return "одна";
  38. if (value == 2)
  39. return "две";
  40. }
  41. return result;
  42. }
  43. protected override string GetTen(bool male, long value)
  44. {
  45. return tens[value];
  46. }
  47. protected override string GetHund(bool male, long value)
  48. {
  49. return hunds[value / 100];
  50. }
  51. protected override WordInfo GetThousands()
  52. {
  53. return thousands;
  54. }
  55. protected override WordInfo GetMillions()
  56. {
  57. return millions;
  58. }
  59. protected override WordInfo GetMilliards()
  60. {
  61. return milliards;
  62. }
  63. protected override WordInfo GetTrillions()
  64. {
  65. return trillions;
  66. }
  67. protected override CurrencyInfo GetCurrency(string currencyName)
  68. {
  69. currencyName = currencyName.ToUpper();
  70. return currencyList[currencyName];
  71. }
  72. protected override string GetZero()
  73. {
  74. return "ноль";
  75. }
  76. protected override string GetMinus()
  77. {
  78. return "минус";
  79. }
  80. protected override string Case(long value, WordInfo info)
  81. {
  82. value = value % 100;
  83. if (value > GetFixedWordsCount())
  84. value = value % 10;
  85. switch (value)
  86. {
  87. case 1:
  88. return info.one;
  89. case 2:
  90. case 3:
  91. case 4:
  92. return info.two;
  93. default:
  94. return info.many;
  95. }
  96. }
  97. static NumToWordsRu()
  98. {
  99. currencyList = new Dictionary<string, CurrencyInfo>();
  100. currencyList.Add("RUR", new CurrencyInfo(
  101. new WordInfo(true, "рубль", "рубля", "рублей"),
  102. new WordInfo(false, "копейка", "копейки", "копеек")));
  103. currencyList.Add("UAH", new CurrencyInfo(
  104. new WordInfo(false, "гривна", "гривны", "гривен"),
  105. new WordInfo(false, "копейка", "копейки", "копеек")));
  106. currencyList.Add("EUR", new CurrencyInfo(
  107. new WordInfo(true, "евро", "евро", "евро"),
  108. new WordInfo(true, "евроцент", "евроцента", "евроцентов")));
  109. currencyList.Add("USD", new CurrencyInfo(
  110. new WordInfo(true, "доллар", "доллара", "долларов"),
  111. new WordInfo(true, "цент", "цента", "центов")));
  112. currencyList.Add("RUB", new CurrencyInfo(
  113. new WordInfo(true, "рубль", "рубля", "рублей"),
  114. new WordInfo(false, "копейка", "копейки", "копеек")));
  115. currencyList.Add("BYN", new CurrencyInfo(
  116. new WordInfo(true, "рубль", "рубля", "рублей"),
  117. new WordInfo(false, "копейка", "копейки", "копеек")));
  118. currencyList.Add("BBYN", new CurrencyInfo(
  119. new WordInfo(true, "белорусский рубль", "белорусских рубля", "белорусских рублей"),
  120. new WordInfo(false, "белорусская копейка", "белорусских копейки", "белорусских копеек")));
  121. }
  122. }
  123. }