Конвертация в римские цифры и обратно в 1С

По мотивам комментариев к статье «Конвертация числа в различные системы исчисления в 1С» (спасибо пользователю kuzyara).

Функции для конвертации арабских цифр в римские и обратно.

1 комментарий к “Конвертация в римские цифры и обратно в 1С

  1. Функция ArabicToRoman(Знач пчАрабскоеЧисло) Экспорт
    мБуквы = СтрРазделить(» M CM D CD C XC L XL X IX V IV I», » «,Ложь);
    мЗначен = СтрРазделить(«1000 900 500 400 100 90 50 40 10 9 5 4 1″, » «,Ложь);
    сРимскоеЧисло = «»;

    Для чИндРимской = 0 По мБуквы.ВГраница() Цикл
    чЗначениеРимской=Число(мЗначен[чИндРимской]);
    Пока пчАрабскоеЧисло >= чЗначениеРимской Цикл
    сРимскоеЧисло = сРимскоеЧисло + мБуквы[чИндРимской];
    пчАрабскоеЧисло = пчАрабскоеЧисло — чЗначениеРимской;
    КонецЦикла;
    КонецЦикла;

    Возврат сРимскоеЧисло;
    КонецФункции

    Функция RomanToArabic(псРимскоеЧисло) Экспорт
    струкРимские = Новый Структура(«M, D, C, L, X, V, I», 1000, 500, 100, 50, 10, 5, 1);
    чСимволовРим = СтрДлина(псРимскоеЧисло);
    чАрабскоеЧисло = 0;

    Для чПозРим=1 По чСимволовРим Цикл
    Попытка
    чЗначениеРимской=струкРимские[Сред(псРимскоеЧисло, чПозРим, 1)];
    чЗначениеРимскойСледующей=?(чПозРим=чСимволовРим, 0, струкРимские[Сред(псРимскоеЧисло, чПозРим+1, 1)]);
    Исключение Возврат Неопределено КонецПопытки;
    Если чЗначениеРимской < чЗначениеРимскойСледующей Тогда
    чАрабскоеЧисло = чАрабскоеЧисло — чЗначениеРимской;
    Иначе
    чАрабскоеЧисло = чАрабскоеЧисло + чЗначениеРимской;
    КонецЕсли;
    КонецЦикла;

    Возврат чАрабскоеЧисло;
    КонецФункции

    Спасибо за алгоритм, оптимизировал 🙂

Оставить комментарий