Остаток от деления в 1С 8.3 и 8.2
Недавно в чужом программном коде столкнулся с тем, что не все программисты 1С знают, как в 1С получить остаток от деления.
Периодически встречаются вот такие конструкции:
ОстатокОтДеления = Делимое — Цел(Делимое / Делитель) * Делитель;
Это конечно забавный и остроумный способ. Но есть более простой метод, встроенный в платформу:
ОстатокОтДеления = Делимое % Делитель;
Вот, собственно, и всё!
P.S. Кстати, результат 1%2 = 1, некоторые почему-то думают, что ноль 🙂
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
СПРОСИТЕ в комментариях!
Александра:
Добрый вечер.А вы уже пробовали заполнять матрицу змейкой числами от 1 до 100 на 1с?
Н:
Змейкой уже не актуально. Правильнее Бустадефон (ходом быка).
Дмитрий:
Если надо получить остаток от деления в запросе, то к сожалению это «ОстатокОтДеления = Делимое — Цел(Делимое / Делитель) * Делитель» похоже единственный способ. Самому пришлось так делать.
Михаил:
да, в запросе нельзя, а вот в СКД можно
KiraLis39:
В каком смысле «1%2 = 1»?.. Это по каким таким логикам, каких миров?.. Что за великий программист подобное в голове своей провернул? Я не понимаю, как можно сию мысль осознать.
Вася:
По обычной такой математической логике. Остаток от деления единицы на два равен единице.
Snouphruh:
тут надо смотреть на процесс деления с стороны только целых чисел. 1 на 2 целочисленно не делится. результат деления тут будет 0, а вот остаток и будет 1.
если всЁ равно не понятно пока, тогда предлагаю рассмотреть деление 3 на 2 (или 5 на 2) в качестве примера.
3 / 2 = 1, остаток 1 (так как 3 — 2 * 1 = 1).
5 / 2 = 2, остаток 1 (так как 5 — 2 * 2 = 1).
а теперь наш случай:
1 / 2 = 0, остаток 1 (так как 1 — 2 * 0 = 1).
ps: а вообще процессор компьютера, выполняя целочисленное деление командой div или idiv, получает целочисленный результат от деления и остаток одним действием.
целочисленный результат помещается в регистр RAX (если рассматриваем 64-битный вариант), а остаток помещается в регистр RDX.
RarenatsuDev:
Посмотрите про такую алгебраическую структуру, как кольцо вычетов по модулю и всё встанет на свои места
esqado:
«Недавно в чужом программном столкнулся с тем»
Уточните пожалуйста, чужой программный кто?
(коммент можно удалить)