Имя: Пароль:
1C
1C 7.7
v7: Странно работает функция Окр() в 1С 7.7
0 BruS
 
15.01.20
18:28
Недавно у клиента возникла проблема с результатом вычисления (пропадала 1 копейка).
Стал копать и нашел то, от чего офигел:
Окр(411.79/6*3, 2, 1) = 205.89
Окр(411.79*3/6, 2, 1) = 205.9
без округления результат один и тот же: 411.79*3/6 = 205.895 и 411.79/6*3 = 205.895
Кто-нить вообще может это как-то это объяснить.
Релиз последний 7.70.027
1 palpetrovich
 
15.01.20
19:00
(0)если  без округления результат один и тот же, то
хитраяЦифра = 411.79/6*3
Окр(хитраяЦифра , 2, 1) = 205.89
2 BruS
 
15.01.20
19:09
Так правильный результат то должен быть 205.9
3 Builder
 
15.01.20
19:31
(2) С чего бы? Округление до 2-х знаков указано.
А вот прикол воспроизвелся, занятно :)
4 BruS
 
15.01.20
19:44
Пораскинув мозгами пришел к выводу, что причина в ограничении разрядности числа в 7.7 и получении в результате деления 6 в периоде.
Кстати этот эффект (проблемой уже не называю) не только в 7.7. Написав небольшой запрос в SQL получил такой же результат:
SELECT ROUND(411.79 / 6 * 3, 2) = 205.89
SELECT ROUND(411.79 * 3 / 6, 2)) = 205.9
в 8-ке и excel такого нет, видимо какой-то другой механизм округления используется.
В общем господа программисты учитывайте это при разработке.
5 mikecool
 
15.01.20
22:29
(4) правильнее результат получается когда ты большее число делишь на что то, т.е. сначала произведи все перемножения, а затем уже дели
ты еще в питоне попробуй посчитать числа с плавающей точкой - там вообще мозг завернется
6 Злопчинский
 
15.01.20
23:30
"шо, опять?"
рассматривалось неоднократно, поищи на мисте
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший