Функция округления Окр() странно работает
Функция округления Окр() в 1С77 как-то странно работает.
Окр(482.37 * (20 / 120), 2) = 80.39
тоже самое, но без скобок внутри дает другой результат, хотя вроде не должно.
Окр(482.37 * 20 / 120, 2) = 80.40
Это нормально? Как теперь считать НДС? Со скобками, без?
И почему-то когда ставка НДС была 18% такие косяки не вылезали.
Окр(482.37 * (20 / 120), 2) = 80.39
тоже самое, но без скобок внутри дает другой результат, хотя вроде не должно.
Окр(482.37 * 20 / 120, 2) = 80.40
Это нормально? Как теперь считать НДС? Со скобками, без?
И почему-то когда ставка НДС была 18% такие косяки не вылезали.
По теме из базы знаний
- 30 задач. Странных и не очень
- Из Word в табличный документ
- Работа с 1С через протокол OData
- Расширение для интеграции с маркетплейсами из одного окна: Озон, ВБ, Яндекс, Сбер, Али, ЛаМода для 1С:УНФ, УТ, КА, ERP
- API-интеграция 1С с маркетплейсами ОЗОН, WildBerries, Я.Маркет, СберМегаМаркет, Стройландия, Леруа Мерлен, Hoff, AliExpress для УТ11, КА2, ERP2, УНФ, БП3, Розница, УТ10, УПП1.3
Ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(1)
при чем тут функция.
Обычная математика, 5 класс, то что в скобках выполняется первым. А без скобок просто все подряд.
таким образом в первом случае результат
80.39499999
во втором случае
80.395
по правилам округления, берем значение после нужного разряда, и если оно меньше 5 то в меньшую сторону, если 5 и больше то в большую.
Вот и получим 80.39 и 80.40
Функция округления Окр() в 1С77 как-то странно работает.
при чем тут функция.
Обычная математика, 5 класс, то что в скобках выполняется первым. А без скобок просто все подряд.
таким образом в первом случае результат
80.39499999
во втором случае
80.395
по правилам округления, берем значение после нужного разряда, и если оно меньше 5 то в меньшую сторону, если 5 и больше то в большую.
Вот и получим 80.39 и 80.40
(5)
и опять же проблема не в функции ОКР,
а в самой форме представления чисел с плавающей запятой. Видимо немного по разному там это работает.
в 8.2. результат 482.37 * (20 / 120) = 80,39500000000000000000000016079
Соответственно функция ОКР так и отработает 80.395.
Почему тогда в 1с8 работает иначе? Там в обоих примерах получается 80,4.
и опять же проблема не в функции ОКР,
а в самой форме представления чисел с плавающей запятой. Видимо немного по разному там это работает.
в 8.2. результат 482.37 * (20 / 120) = 80,39500000000000000000000016079
Соответственно функция ОКР так и отработает 80.395.
(8)
в чем баг то ?
Приведите результат вычисления со скобками и без скобок, без применения функции ОКР, в 7.7
тогда уже и будет понятно баг или не баг.
для 8-ки все результаты я привел,
про 7 ку забыл лет 10 назад, поэтому проверить нет возможности.
Да нет, как раз в функции окр 7.7. Это баг
в чем баг то ?
Приведите результат вычисления со скобками и без скобок, без применения функции ОКР, в 7.7
тогда уже и будет понятно баг или не баг.
для 8-ки все результаты я привел,
про 7 ку забыл лет 10 назад, поэтому проверить нет возможности.
(1)
косяки сколько помню, всегда периодически вылазили в расчете НДСов,
бывает даже в документах от поставщика приходят одни цифры, а при оприходовании товара суммы НДС подгоняют. Особенно на мелочевке.
И почему-то когда ставка НДС была 18% такие косяки не вылезали.
косяки сколько помню, всегда периодически вылазили в расчете НДСов,
бывает даже в документах от поставщика приходят одни цифры, а при оприходовании товара суммы НДС подгоняют. Особенно на мелочевке.
(4) не было никаких "косяков".
все так называемые "косяки" есть следствие прменяемых разных алгоритмов у сторон сделки. ктото считает НДС "от прямого", кто-то "от обратного" (а правила математики с учетом ограничения разрядности цены) и дадут "отклонения" (кто-то еще вдобавок ошибок туда нахренячит по типу задававшихся в этой ветке). для приходных документов если вбивать количество, сумму и суммуНДС - !О, ЧУДО! - никаких отклонений и подгонок не будет. вообще. никогда. то есть совсем.
все так называемые "косяки" есть следствие прменяемых разных алгоритмов у сторон сделки. ктото считает НДС "от прямого", кто-то "от обратного" (а правила математики с учетом ограничения разрядности цены) и дадут "отклонения" (кто-то еще вдобавок ошибок туда нахренячит по типу задававшихся в этой ветке). для приходных документов если вбивать количество, сумму и суммуНДС - !О, ЧУДО! - никаких отклонений и подгонок не будет. вообще. никогда. то есть совсем.
(1) вот код для понимания механики вычислений:
Результат:
а = 80.395
б = 80.395
Округление а = 80.39
Округление б = 80.4
Новое а = 80.395
Новое б = 80.395
Округление новое а = 80.4
Округление новое б = 80.4
а = 482.37 * (20 / 120) ;
б = 482.37 * 20 / 120;
Сообщить("а = "+а);
Сообщить("б = "+б);
Сообщить("Округление а = "+Окр(а, 2));
Сообщить("Округление б = "+Окр(б, 2));
а = а + 0.00000000000000000000001;
б = б + 0.00000000000000000000001;
Сообщить("Новое а = "+а);
Сообщить("Новое б = "+б);
Сообщить("Округление новое а = "+Окр(а, 2));
Сообщить("Округление новое б = "+Окр(б, 2));
ПоказатьРезультат:
а = 80.395
б = 80.395
Округление а = 80.39
Округление б = 80.4
Новое а = 80.395
Новое б = 80.395
Округление новое а = 80.4
Округление новое б = 80.4
(19) это называется контекст. Произошло неявное преобразование. Это разработчик должен знать, а когда не знает думает что баг! Когда придет понимание особенностей клюшки, тогда глупые вопросы уйдут!
Иногда достаточно справку почитать иногда документацию, а иногда приходится рыть форум и только тогда допирать до сути!
Иногда достаточно справку почитать иногда документацию, а иногда приходится рыть форум и только тогда допирать до сути!
В семерке выводимые в отображение после ЗПТ урезаются до 20 знаков вроде, реально там не помню сколько цифр максимальное дробное представление.
для примера
в отладчике:
(18зн) 482.37*0.166666666666666667 = 80.39500000000000016079
(19зн) 482.37*0.1666666666666666667 = 80.39500000000000001608
(20зн) 482.37*0.16666666666666666667 = 80.39500000000000000161
(21зн) 482.37*0.166666666666666666667 = 80.39500000000000000016
(22зн) 482.37*0.1666666666666666666667 = 80.39500000000000000002
(23зн) 482.37*0.16666666666666666666667 = 80.395
482.37*1000000000*(20/120) = 80394999999.99999999999999967842 //<==== меньше чем 0.395
(482.37*(20/120)-80)*1000000000000 = 394999999999.99999999999967842
если посмотреть на 2 последние строки - то все видно совсем ясно - и отклонение "вниз" от 0.395 как выше правильно указали -0.0.....32158
для примера
в отладчике:
(18зн) 482.37*0.166666666666666667 = 80.39500000000000016079
(19зн) 482.37*0.1666666666666666667 = 80.39500000000000001608
(20зн) 482.37*0.16666666666666666667 = 80.39500000000000000161
(21зн) 482.37*0.166666666666666666667 = 80.39500000000000000016
(22зн) 482.37*0.1666666666666666666667 = 80.39500000000000000002
(23зн) 482.37*0.16666666666666666666667 = 80.395
482.37*1000000000*(20/120) = 80394999999.99999999999999967842 //<==== меньше чем 0.395
(482.37*(20/120)-80)*1000000000000 = 394999999999.99999999999967842
если посмотреть на 2 последние строки - то все видно совсем ясно - и отклонение "вниз" от 0.395 как выше правильно указали -0.0.....32158
другое дело, что правильно считать - наверное - вот так, специально выделяю скобками:
(482.37/120)*20 = 80.395 = 80.40
где первое действие - вычисляем единицу БАЗЫ (получаем точно 4.01975) - и потом берем 20 единиц этой базы. и получаем _точно_ 80.395
правда, это не мешает НДС с авансов считать не так, а именно по ставке 18/118 или 20/120.
"искать логику в налоговом законодательстве - бесполезное занятие".
так что тут зависит не столько от математики, скольо от того как догворится о порядке расчета.. ;-)
(482.37/120)*20 = 80.395 = 80.40
где первое действие - вычисляем единицу БАЗЫ (получаем точно 4.01975) - и потом берем 20 единиц этой базы. и получаем _точно_ 80.395
правда, это не мешает НДС с авансов считать не так, а именно по ставке 18/118 или 20/120.
"искать логику в налоговом законодательстве - бесполезное занятие".
так что тут зависит не столько от математики, скольо от того как догворится о порядке расчета.. ;-)
Да фигня всё это, у нас торговые сети умудряются вычислить 18% НДС из 19810.00 руб. в размере 3021.90.
Наши спокойно подгоняют документы под эту сумму..
Хотя я сколько ни искал способов вычислить такое значение, так и не смог, всегда получается так: 3021.86
При этом в догоре о порядке расчета с этой сетью указано, что НДС округляем до 2х знаков после запятой.
Наши спокойно подгоняют документы под эту сумму..
Хотя я сколько ни искал способов вычислить такое значение, так и не смог, всегда получается так: 3021.86
При этом в догоре о порядке расчета с этой сетью указано, что НДС округляем до 2х знаков после запятой.
(31)
А если покупатель такой НДС берет к вычету, так тоже все нормально - ведь продавец уплатил в бюджет именно такую сумму и именно ее он предъявил покупателю - покупатель вправе принять ее к вычету.
P.S. По теме ветки: попробовал воспроизвести описанную ситуацию в 7.7 через Табло - проблема не подтверждается, во всех случаях неокругленный результат равен 80.395, округленный - 80.40. ЧЯДНТ?
Самое интересное, что налоговая спокойно принимает такой НДС.
А почему бы ей его не принять? Он ведь завышен, а не занижен.
А если покупатель такой НДС берет к вычету, так тоже все нормально - ведь продавец уплатил в бюджет именно такую сумму и именно ее он предъявил покупателю - покупатель вправе принять ее к вычету.
P.S. По теме ветки: попробовал воспроизвести описанную ситуацию в 7.7 через Табло - проблема не подтверждается, во всех случаях неокругленный результат равен 80.395, округленный - 80.40. ЧЯДНТ?
Окр(<?>,,)
Синтаксис:
Окр(<Число1>,<Число2>,<Способ>)
Назначение:
Возвращает значение результата округления.
Параметры:
<Число1> - числовое выражение, значение которого надо округлить;
<Число2> - число значащих цифр дробной части или
минус число не значащих младших цифр целой части (не обязателен, по умолчанию - 0);
<Способ> - способ округления граничных значений: 0 - если 1.5 округляется до 1, 1 - если 1.5 округляется до 2 (не обязателен, по умолчанию принимается значение, установленное в окне свойств конфигурации: Конфигурация/Задача/Свойства страница Задача, поле Округление).
Синтаксис:
Окр(<Число1>,<Число2>,<Способ>)
Назначение:
Возвращает значение результата округления.
Параметры:
<Число1> - числовое выражение, значение которого надо округлить;
<Число2> - число значащих цифр дробной части или
минус число не значащих младших цифр целой части (не обязателен, по умолчанию - 0);
<Способ> - способ округления граничных значений: 0 - если 1.5 округляется до 1, 1 - если 1.5 округляется до 2 (не обязателен, по умолчанию принимается значение, установленное в окне свойств конфигурации: Конфигурация/Задача/Свойства страница Задача, поле Округление).
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)