Конвертация числа в различные системы исчисления в 1С

 

Две простые простые функции которые конвертируют числа из десятичной системы исчисления в систему исчисления с любым другим основанием и обратно.

Dec в Bin, Oct, Hex и прочие:

Bin, Oct, Hex и прочие в Dec:

Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Оценка статьи:
УжасноПлохоНеплохоХорошоОтлично (оценок: 3, средняя оценка: 2,33 из 5)
Загрузка...

Понравилась статья? Поделиться с друзьями:
Комментарии: 11
  1. kuzyara

    Перенес в отдельную статью: конвертация в римские цифры и обратно в 1С.

  2. kuzyara

    Перенесено в отдельную статью: Excel. Как получить имя столбца по номеру и обратно в 1С

  3. kuzyara

    читал тут на хабре про вторую стадию программиста:
    http://habrahabr.ru/company/veeam/blog/267187/
    вас вспомнил)
    http://infostart.ru/public/99748/

    1. Моя текущая привычка именования переменных как раз из третьей стадии и происходит (коллегам понятнее именно так), но попробую исправиться.

  4. СпасибоЗаКод

    В Функция AnyToDec() посоветовал бы использовать ВРег для тЗначение либо в начале
    тЗначение = ВРег(тЗначение)
    либо в середине Сред(ВРег(тЗначение), тСимвол, 1)

    ну и по мелочи (все равно уже посчитано)
    Для тСимвол = 1 По тДлина Цикл

  5. Костя

    Мой Вариант:
    Функция AnyToDec(Значение, Основание = 16)

    Перем Результат, ЗначениеДлина, Множитель, ЕстьРазделительДроби, Поз, ТекСимвол;

    Результат = 0;

    ЗначениеДлина = СтрДлина(Значение);
    Множитель = 1;
    ЕстьРазделительДроби = Ложь;
    Для й = 1 По ЗначениеДлина Цикл

    ТекСимвол = Сред(Значение, ЗначениеДлина — й + 1, 1);

    Поз = Найти(«0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ», ТекСимвол);
    Если Поз И Поз < Основание Тогда

    Результат = Результат + (Поз — 1) * Множитель;
    Множитель = Множитель * Основание;

    ИначеЕсли Не ЕстьРазделительДроби И (ТекСимвол = "." Или ТекСимвол = ",") Тогда

    ЕстьРазделительДроби = Истина;

    Результат = Результат/Множитель;
    Множитель = 1;

    КонецЕсли;

    КонецЦикла;

    Возврат Результат;

    КонецФункции

    1. Костя

      !!! Правильно переводит, оптимальная логика, понимает дроби
      Без проблем преобразует:
      0xFFFF
      FF FF AA
      1001,1101

    2. Костя

      исправить:
      Если Поз И Поз <= Основание Тогда

  6. Денис

    Убираем лишний цикл внутри цикла
    Функция AnyToDec(ИсхЗначение, ИсхОснование)

    Результ=0;

    ИсхСимволов = СтрДлина(ИсхЗначение);
    Для ПозСимвола = 1 По ИсхСимволов Цикл
    Результ=Результ + (Найти(«0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ», Сред(ИсхЗначение, ПозСимвола, 1))-1) * pow(ИсхОснование, ИсхСимволов-ПозСимвола);
    КонецЦикла;

    Возврат Результ;

    КонецФункции

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: