По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) напишите свою. Там не так сложно.
Вот для примера, с чего начать:
Вот для примера, с чего начать:
ИтоговоеЧисло = ИзЧислаПрописьюВЧисло("Сто Двадцать Три тысячи Двести Сорок один рубль");
Функция ИзЧислаПрописьюВЧисло(ЧислоПрописью)
СоответствиеЧисел = ПолучитьСоответствиеЧиселПрописи();
СоответствиеРазрядов = ПолучитьСоответствиеРазрядов();
МассивСоставляющихЧисла = СтрРазделить(ЧислоПрописью, " ", Ложь);
ИтоговоеЧисло = 0;
СуммаРазряда = 0;
Для Каждого СоставляющаяЧисла Из МассивСоставляющихЧисла Цикл
ЗначениеСоставляющейЧисла = СоответствиеРазрядов[НРег(СоставляющаяЧисла)];
Если ЗначениеСоставляющейЧисла = Неопределено Тогда
ЗначениеСоставляющейЧисла = СоответствиеЧисел[НРег(СоставляющаяЧисла)];
Если ЗначениеСоставляющейЧисла = Неопределено Тогда
Возврат 0;
Иначе
СуммаРазряда = СуммаРазряда + ЗначениеСоставляющейЧисла;
КонецЕсли;
Иначе
ИтоговоеЧисло = ИтоговоеЧисло + СуммаРазряда*ЗначениеСоставляющейЧисла;
СуммаРазряда = 0;
КонецЕсли;
КонецЦикла;
ИтоговоеЧисло = ИтоговоеЧисло+СуммаРазряда;
Возврат ИтоговоеЧисло;
КонецФункции
Функция ПолучитьСоответствиеЧиселПрописи()
СоответствиеЧисел = Новый Соответствие;
СоответствиеЧисел.Вставить("ноль", 0);
СоответствиеЧисел.Вставить("один", 1);
СоответствиеЧисел.Вставить("одна", 1);
СоответствиеЧисел.Вставить("две", 2);
СоответствиеЧисел.Вставить("два", 2);
СоответствиеЧисел.Вставить("три", 3);
СоответствиеЧисел.Вставить("четыре", 4);
СоответствиеЧисел.Вставить("пять", 5);
СоответствиеЧисел.Вставить("шесть", 6);
СоответствиеЧисел.Вставить("семь", 7);
СоответствиеЧисел.Вставить("восемь", 8);
СоответствиеЧисел.Вставить("девять", 9);
СоответствиеЧисел.Вставить("десять", 10);
СоответствиеЧисел.Вставить("одинадцать", 11);
СоответствиеЧисел.Вставить("двенадцать", 12);
СоответствиеЧисел.Вставить("тринадцать", 13);
СоответствиеЧисел.Вставить("четырнадцать", 14);
СоответствиеЧисел.Вставить("пятнадцать", 15);
...
СоответствиеЧисел.Вставить("двадцать", 20);
СоответствиеЧисел.Вставить("тридцать", 30);
СоответствиеЧисел.Вставить("сорок", 40);
...
СоответствиеЧисел.Вставить("сто", 100);
СоответствиеЧисел.Вставить("двести", 200);
СоответствиеЧисел.Вставить("триста", 300);
СоответствиеЧисел.Вставить("четыреста", 400);
...
Возврат СоответствиеЧисел;
КонецФункции
Функция ПолучитьСоответствиеРазрядов()
СоответствиеРазрядов = Новый Соответствие;
СоответствиеРазрядов.Вставить("рубль", 1);
СоответствиеРазрядов.Вставить("рубля", 1);
СоответствиеРазрядов.Вставить("рублей", 1);
СоответствиеРазрядов.Вставить("тысяч", 1000);
СоответствиеРазрядов.Вставить("тысяча", 1000);
СоответствиеРазрядов.Вставить("тысячи", 1000);
СоответствиеРазрядов.Вставить("миллион", 1000000);
СоответствиеРазрядов.Вставить("миллиона", 1000000);
СоответствиеРазрядов.Вставить("миллионов", 1000000);
Возврат СоответствиеРазрядов;
КонецФункции
Показать
(3) Нет не должно быть, потому что это бред – "Одна тысяча триста восемьдесят рублей 00 копеек" ниоткуда что ли взялось. Оно взялось из числа, так зачем извращаться, если можно просто взять это число? Сейчас вы скажете, что число это не известно, а я вам отвечу, что значит проблема лежит в другой плоскости, меняйте логику решения. Данные берите из ИБ.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот