Выполняет преобразование римского числа в арабское.
// Выполняет преобразование римского числа в арабское. // // Параметры: // РимскоеЧисло - Строка - число, записанное римскими цифрами; // ИспользоватьКириллицу - Булево - использовать в качестве арабских цифр кириллицу или латиницу. // // Возвращаемое значение: // Число - преобразованное число. // // Пример: // СтроковыеФункцииКлиентСервер.ПреобразоватьЧислоВАрабскуюНотацию("ХVII") = 17. // Функция ПреобразоватьЧислоВАрабскуюНотацию(РимскоеЧисло, ИспользоватьКириллицу = Истина) Экспорт АрабскоеЧисло = 0; Если ИспользоватьКириллицу Тогда c1 = "1"; c5 = "У"; c10 = "Х"; c50 = "Л"; c100 ="С"; c500 = "Д"; c1000 = "М"; Иначе c1 = "I"; c5 = "V"; c10 = "X"; c50 = "L"; c100 ="C"; c500 = "D"; c1000 = "M"; КонецЕсли; РимскоеЧисло = СокрЛП(РимскоеЧисло); ЧислоСимволов = СтрДлина(РимскоеЧисло); Для Сч = 1 По ЧислоСимволов Цикл Если Сред(РимскоеЧисло,Сч,1) = c1000 Тогда АрабскоеЧисло = АрабскоеЧисло+1000; ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c500 Тогда АрабскоеЧисло = АрабскоеЧисло+500; ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c100 Тогда Если (Сч < ЧислоСимволов) И ((Сред(РимскоеЧисло,Сч+1,1) = c500) Или (Сред(РимскоеЧисло,Сч+1,1) = c1000)) Тогда АрабскоеЧисло = АрабскоеЧисло-100; Иначе АрабскоеЧисло = АрабскоеЧисло+100; КонецЕсли; ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c50 Тогда АрабскоеЧисло = АрабскоеЧисло+50; ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c10 Тогда Если (Сч < ЧислоСимволов) И ((Сред(РимскоеЧисло,Сч+1,1) = c50) Или (Сред(РимскоеЧисло,Сч+1,1) = c100)) Тогда АрабскоеЧисло = АрабскоеЧисло-10; Иначе АрабскоеЧисло = АрабскоеЧисло+10; КонецЕсли; ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c5 Тогда АрабскоеЧисло = АрабскоеЧисло+5; ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c1 Тогда Если (Сч < ЧислоСимволов) И ((Сред(РимскоеЧисло,Сч+1,1) = c5) Или (Сред(РимскоеЧисло,Сч+1,1) = c10)) Тогда АрабскоеЧисло = АрабскоеЧисло-1; Иначе АрабскоеЧисло = АрабскоеЧисло+1; КонецЕсли; КонецЕсли; КонецЦикла; Возврат АрабскоеЧисло; КонецФункции /////////////////////////////////////////////////////////////////////////////////////////////////////// // Copyright (c) 2019, ООО 1С-Софт // Все права защищены. Эта программа и сопроводительные материалы предоставляются // в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) // Текст лицензии доступен по ссылке: // https://creativecommons.org/licenses/by/4.0/legalcode ///////////////////////////////////////////////////////////////////////////////////////////////////////
// Выполняет преобразование римского числа в арабское.
//
// Параметры:
// РимскоеЧисло - Строка - число, записанное римскими цифрами;
// ИспользоватьКириллицу - Булево - использовать в качестве арабских цифр кириллицу или латиницу.
//
// Возвращаемое значение:
// Число - преобразованное число.
//
// Пример:
// СтроковыеФункцииКлиентСервер.ПреобразоватьЧислоВАрабскуюНотацию("ХVII") = 17.
//
Функция ПреобразоватьЧислоВАрабскуюНотацию(РимскоеЧисло, ИспользоватьКириллицу = Истина) Экспорт
АрабскоеЧисло = 0;
Если ИспользоватьКириллицу Тогда
c1 = "1"; c5 = "У"; c10 = "Х"; c50 = "Л"; c100 ="С"; c500 = "Д"; c1000 = "М";
Иначе
c1 = "I"; c5 = "V"; c10 = "X"; c50 = "L"; c100 ="C"; c500 = "D"; c1000 = "M";
КонецЕсли;
РимскоеЧисло = СокрЛП(РимскоеЧисло);
ЧислоСимволов = СтрДлина(РимскоеЧисло);
Для Сч = 1 По ЧислоСимволов Цикл
Если Сред(РимскоеЧисло,Сч,1) = c1000 Тогда
АрабскоеЧисло = АрабскоеЧисло+1000;
ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c500 Тогда
АрабскоеЧисло = АрабскоеЧисло+500;
ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c100 Тогда
Если (Сч < ЧислоСимволов) И ((Сред(РимскоеЧисло,Сч+1,1) = c500) Или (Сред(РимскоеЧисло,Сч+1,1) = c1000)) Тогда
АрабскоеЧисло = АрабскоеЧисло-100;
Иначе
АрабскоеЧисло = АрабскоеЧисло+100;
КонецЕсли;
ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c50 Тогда
АрабскоеЧисло = АрабскоеЧисло+50;
ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c10 Тогда
Если (Сч < ЧислоСимволов) И ((Сред(РимскоеЧисло,Сч+1,1) = c50) Или (Сред(РимскоеЧисло,Сч+1,1) = c100)) Тогда
АрабскоеЧисло = АрабскоеЧисло-10;
Иначе
АрабскоеЧисло = АрабскоеЧисло+10;
КонецЕсли;
ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c5 Тогда
АрабскоеЧисло = АрабскоеЧисло+5;
ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c1 Тогда
Если (Сч < ЧислоСимволов) И ((Сред(РимскоеЧисло,Сч+1,1) = c5) Или (Сред(РимскоеЧисло,Сч+1,1) = c10)) Тогда
АрабскоеЧисло = АрабскоеЧисло-1;
Иначе
АрабскоеЧисло = АрабскоеЧисло+1;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат АрабскоеЧисло;
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////