Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Странный баг 1С 77 :( (число прочтений - 4783 )
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Странный баг 1С 77 :(
01. Марта 2010 :: 15:16
Печать  
Народ, встретился со странным багом 1С 77 25 релиз Печаль
Не работает округление Печаль

Вкратце - правлю чужую конфу
есть переменная Результат
ее значение равно 6199.425 (важно, что именно 3 числа после десятичной точки.
Код Окр(Результат, 2, 1) выдает 6199.42, а не 6199.43, как хотелось бы.
Причем код Окр(6199.425, 2, 1) выдает 6199.43 %)

Прикладываю скриншот из отладчика, показывающий баг.

Обычная, чужая конфа, ВК нету, кроме v7plus
Это не реквизит шапки или таб.части данного документа, в глобальнике также нет такой переменной.

Что можете сказать/посоветовать Улыбка ?

ЗЫ вроде я еще 77 не забыл, а тут такой баг Улыбка
  

Bug1C77.jpg ( 259 KB | Загрузки )
Bug1C77.jpg

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Странный баг 1С 77 :(
Ответ #1 - 01. Марта 2010 :: 15:38
Печать  
Видимо дело вот в этом:
  

______.png ( 5 KB | Загрузки )
______.png
Наверх
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Странный баг 1С 77 :(
Ответ #2 - 01. Марта 2010 :: 15:43
Печать  
1. Естественно, так и стоит.
2. В доке на 77 все-таки написано, что при явно заданном третьем параметре функция Окр принимает именно его, а не значение из конфигурации.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Странный баг 1С 77 :(
Ответ #3 - 01. Марта 2010 :: 15:48
Печать  
В общем, решено простой перестановкой множителей Улыбка
Типа вместо
Цитата:
кущий.ПроцентОплаты/100;

написал
Цитата:
Результат1= РазмерОплаты(Текущий.РазмерОплаты,ТОкончание)*Текущий.ПроцентОплаты/100 * (Часы/Макс(1,Часов));


т.е. я сначала получаю большое число, а потом уже его делю.
После этого округление работает верно.

Очередной сюрприз от 1С Улыбка чтоб им долго икалось !
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Странный баг 1С 77 :(
Ответ #4 - 01. Марта 2010 :: 15:59
Печать  
artbear писал(а) 01. Марта 2010 :: 15:48:
Очередной сюрприз от 1С Улыбка чтоб им долго икалось !

Работа с плавающей точкой - не самая простая вещь в девелопменте Улыбка Ковырялся когданить в сорцах decNum? Там черт ногу сломит.
  
Наверх
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Странный баг 1С 77 :(
Ответ #5 - 01. Марта 2010 :: 16:12
Печать  
Все понятно разрядной сетки не хватает.
не хватает внутреней разрядности в представлении числа.
Константа 6199.425 может обрабатываться по другому т.к. 1с видит что она не может измениться.
Как описано поле Результат ?

наверное лучше написать так ( по идее должно всегда работать )

ПромежРезультат = Результат * 1000;
ПромежРезультат = Окр(ПромежРезультат,0,1);
Результат = ПромежРезультат / 1000;


ПромежРезультат = Результат * 100;
ПромежРезультат = Окр(ПромежРезультат,0,1);
Результат = ПромежРезультат / 100;
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Странный баг 1С 77 :(
Ответ #6 - 01. Марта 2010 :: 16:26
Печать  
Могу только напомнить, что то, что мы видим (в окне отладчика) - не всегда есть то, что есть на самом деле (в значении CNumeric).
Так что здесь не Артур поймал баг, а суслик поймал Артура.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Странный баг 1С 77 :(
Ответ #7 - 01. Марта 2010 :: 16:34
Печать  
Z1 писал(а) 01. Марта 2010 :: 16:12:
ПромежРезультат = Результат * 100;
ПромежРезультат = Окр(ПромежРезультат,0,1);
Результат = ПромежРезультат / 100;

И так пробовал, оно не работает.
только явная перестановка умножения и деления Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Странный баг 1С 77 :(
Ответ #8 - 01. Марта 2010 :: 16:35
Печать  
Если не забуду, завтра сделаю простой юнит-тест.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Странный баг 1С 77 :(
Ответ #9 - 01. Марта 2010 :: 17:43
Печать  
artbear писал(а) 01. Марта 2010 :: 16:34:
Z1 писал(а) 01. Марта 2010 :: 16:12:
ПромежРезультат = Результат * 100;
ПромежРезультат = Окр(ПромежРезультат,0,1);
Результат = ПромежРезультат / 100;

И так пробовал, оно не работает.
только явная перестановка умножения и деления Улыбка


Тогда так чтобы все увидеть
Сообщить("Результат = " + Результат);
ПромежРезультат = Результат * 100;
Сообщить("ПромежРезультат = " + ПромежРезультат);
ПромежРезультат = Окр(ПромежРезультат,0,1);
Результат = ПромежРезультат / 100;

и скажи чему равен результат и  ПромежРезультат при  печати сообщения.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Странный баг 1С 77 :(
Ответ #10 - 01. Марта 2010 :: 19:23
Печать  
пристыкуюсь во мнении к Мише.
На самом деле в переменной Результат не 6199.425, а что то типа 6199.424999999999999999999.
Символьное представление такого числа допускает неточность. Хотя математика работает точно.
Элементарно проверяется в табло:

6199.42499999999999999999 = 6199.42499999999999999999
6199.424999999999999999999 = 6199.425
  

1&&2&&3
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Странный баг 1С 77 :(
Ответ #11 - 02. Марта 2010 :: 12:25
Печать  
Третьим буду. Старый бантик.
  
Наверх
www  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Странный баг 1С 77 :(
Ответ #12 - 02. Марта 2010 :: 13:01
Печать  
ну и до кучи:
Окр(6199.429999,2,2) = 6199.42
Улыбка
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Странный баг 1С 77 :(
Ответ #13 - 02. Марта 2010 :: 13:25
Печать  
Eprst писал(а) 02. Марта 2010 :: 13:01:
ну и до кучи:
Окр(6199.429999,2,2) = 6199.42
Улыбка

Так вообще теоретически неопределено
значение третьего параметра 0 или 1
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Странный баг 1С 77 :(
Ответ #14 - 02. Марта 2010 :: 13:27
Печать  
Eprst писал(а) 02. Марта 2010 :: 13:01:
ну и до кучи:
Окр(6199.429999,2,2) = 6199.42
Улыбка

Да хоть 3 или 10 поставь, все равно.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать