public static string ConvertDecimalsUkr(string number) // Допоміжний метод для конвертації дробової частини в запис копійок { string Result = "", Digit = "", UkrCents = ""; Digit = number.ToString(); UkrCents = TensToString.TenToStringUkr(Digit); Result += " " + UkrCents; return(Result); }
public static string ConvertNumberUkr(string Number) { string Result = ""; float FltNumber = float.Parse(Number); bool isResult = false; //прапорець, який вказує, що перегляд числа завершено if (FltNumber > 0) { int Digits = Number.Length; string Group = ""; int Pos = 0; string Whole = ""; int decimalPlace = Number.IndexOf(","); // допоміжні змінні для виділення цілої частини if (decimalPlace > 0) { Whole = Number.Substring(0, decimalPlace); } else { Whole = Number; } switch (Digits) //перебираємо розряди і виконуємо допис слів розрядів { case 1: Result = OnesToString.OneToStringUkr(Number); isResult = true; break; case 2: Result = TensToString.TenToStringUkr(Number); isResult = true; break; case 3: Pos = (Digits % 3) + 1; if (Whole.Length >= 3 && Number[Whole.Length - 3] == '2' || // додатковий блок if-else для правильного запису чисел українською Whole.Length >= 3 && Number[Whole.Length - 3] == '3' || // Whole.Length - x визначає першу цифру порядку Whole.Length >= 3 && Number[Whole.Length - 3] == '4') { Group = " сотнi "; } else if (Whole.Length >= 3 && Number[Whole.Length - 3] == '1') { Group = " сотня "; } else { Group = " сотень "; } break; case 4: case 5: case 6: Pos = (Digits % 4) + 1; if (Whole.Length >= 6 && Number[Whole.Length - 6] == '2' || // додатковий блок if-else для правильного запису чисел українською Whole.Length >= 6 && Number[Whole.Length - 6] == '3' || Whole.Length >= 6 && Number[Whole.Length - 6] == '4') { Group = " тисячi "; } else if (Whole.Length >= 6 && Number[Whole.Length - 6] == '1') { Group = " тисяча "; } else { Group = " тисяч "; } break; case 7: case 8: case 9: Pos = (Digits % 7) + 1; if (Whole.Length >= 9 && Number[Whole.Length - 9] == '2' || // додатковий блок if-else для правильного запису чисел українською Whole.Length >= 9 && Number[Whole.Length - 9] == '3' || Whole.Length >= 9 && Number[Whole.Length - 9] == '4') { Group = " мiльйони "; } else if (Whole.Length >= 9 && Number[Whole.Length - 9] == '1') { Group = " мiльйон "; } else { Group = " мiльйонiв "; } break; case 10: case 11: case 12: Pos = (Digits % 10) + 1; if (Whole.Length >= 12 && Number[Whole.Length - 12] == '2' || // додатковий блок if-else для правильного запису чисел українською Whole.Length >= 12 && Number[Whole.Length - 12] == '3' || Whole.Length >= 12 && Number[Whole.Length - 12] == '4') { Group = " мiльярди "; } else if (Whole.Length >= 12 && Number[Whole.Length - 12] == '1') { Group = " мiльярд "; } else { Group = " мiльярдiв "; } break; default: isResult = true; break; } if (!isResult) //для кожного розряду рекурсивно виконуємо допис слова розряду { if (Number.Substring(0, Pos) != "0" && Number.Substring(Pos) != "0") { try { Result = ConvertNumberUkr(Number.Substring(0, Pos)) + Group + ConvertNumberUkr(Number.Substring(Pos)); } catch { } } else { Result = ConvertNumberUkr(Number.Substring(0, Pos)) + ConvertNumberUkr(Number.Substring(Pos)); } } if (Result.Trim().Equals(Group.Trim())) { Result = ""; } } return(Result.Trim()); }