Example #1
0
        /// <summary> Строковое представление числа. </summary>
        /// <param name="val"> Значение числа. </param>
        /// <param name="gender"> Склонение по родам. </param>
        /// <param name="one"> Строка для обозначение единицы в разряде (например: миллион). </param>
        /// <param name="two"> Строка для обозначение 2,3,4 в разряде (например: миллиарда). </param>
        /// <param name="five"> Строка для обозначение 5 и выше в разряде (например: триллионов). </param>
        /// <returns> Строковое представление. </returns>
        internal static string Str(long val, NounGender gender, string one, string two, string five)
        {
            long num = val % 1000;

            if (num == 0)
            {
                return(string.Empty);
            }

            if (num < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(val), "Параметр не может быть отрицательным");
            }

            var list = new List <string>(DependentGenderNumerals[gender]);

            list.AddRange(Numerals20);
            string[] frac20 = list.ToArray();

            var r = new StringBuilder(Hunds[num / 100]);

            if (num % 100 < 20)
            {
                r.Append(frac20[num % 100]);
            }
            else
            {
                r.Append(Tens[num % 100 / 10]);
                r.Append(frac20[num % 10]);
            }

            r.Append(Case(num, one, two, five));

            if (r.Length != 0)
            {
                r.Append(" ");
            }
            return(r.ToString());
        }
Example #2
0
 public Noun() : base("")
 {
     Gender = NounGender.Undefined;
 }
Example #3
0
 public Noun(string text, NounGender gender) : base(text)
 {
     Gender = gender;
 }