/// <summary> /// Записывает пропись суммы в заданной валюте в <paramref name="result"/> строчными буквами. /// </summary> public static StringBuilder Пропись(decimal сумма, Валюта валюта, StringBuilder result) { decimal целая = Math.Floor(сумма); uint дробная = (uint)((сумма - целая) * 100); Число.Пропись(целая, валюта.ОсновнаяЕдиница, result); return(ДобавитьКопейки(дробная, валюта, result)); }
/// <summary> /// Записывает пропись суммы в заданной валюте в <paramref name="result"/> строчными буквами. /// </summary> public static StringBuilder Пропись(double сумма, Валюта валюта, StringBuilder result) { double целая = Math.Floor(сумма); // Вынесение 100 за скобки позволяет избежать ошибки округления // например, когда сумма = 1234.51. uint дробная = (uint)(сумма * 100) - (uint)(целая * 100); Число.Пропись(целая, валюта.ОсновнаяЕдиница, result); return(ДобавитьКопейки(дробная, валюта, result)); }
private static StringBuilder ДобавитьКопейки(uint дробная, Валюта валюта, StringBuilder result) { result.Append(' '); // Эта строчка выполняется быстрее, чем следующая за ней закомментированная. result.Append(дробная.ToString("00")); //result.AppendFormat ("{0:00}", дробная); result.Append(' '); result.Append(Число.Согласовать(валюта.ДробнаяЕдиница, дробная)); return(result); }
private void ЧислоПрописью(СуммаПрописью.Валюта валюта) { try { Excel.Application excelApp = Globals.ThisAddIn.Application as Microsoft.Office.Interop.Excel.Application; Excel.Range selectionRange = excelApp.Selection as Excel.Range; if (selectionRange == null) { System.Windows.Forms.MessageBox.Show("Выдзеленая вобласць не з'яўляецца дыяпазонам!", "Будзьце больш уважлівымі", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Warning); return; } if (selectionRange.Value == null) { return; } int count = selectionRange.Count; if (count > 1) { System.Windows.Forms.MessageBox.Show("Выдзелена некалькі ячэяк. Выдзеліце адну і паўтарыце спробу.", "Будзьце больш уважлівымі", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Warning); return; } else { string result = string.Empty; string s = selectionRange.Value.ToString(); decimal value = 0m; if (Decimal.TryParse(s, out value)) { string check = СуммаПрописью.Сумма.ПроверитьСумму(value); if (check != null) { System.Windows.Forms.MessageBox.Show(check, "Будзьце больш уважлівымі", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Warning); return; } result = СуммаПрописью.Сумма.Пропись(value, валюта); selectionRange.Value = result; } } } catch (Exception e) { System.Windows.Forms.MessageBox.Show(String.Format("Узнікла памылка!\n{0}\n{1}", e.Message, e.StackTrace), "Памылка", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Warning); } }
/// <summary> /// Возвращает пропись заданной суммы. /// </summary> public static string Пропись(double n, Валюта валюта, Заглавные заглавные) { return(Число.ApplyCaps(Пропись(n, валюта, new StringBuilder()), заглавные)); }
/// <summary> /// Возвращает пропись заданной суммы строчными буквами. /// </summary> public static string Пропись(decimal n, Валюта валюта) { return(Число.ApplyCaps(Пропись(n, валюта, new StringBuilder()), Заглавные.Нет)); }