К списку форумов К списку вопросов
Округлятор не округляет. Помогите пожалуйста.
мовин
20.06.2004 - 14:14
1С v 7.7 релиз 18
Конфигурация самописная (что, впрочем, к делу отношение врядли имеет).
В свойствах конфигурации (закладка "Задача") способ округления задан как "округлять 1,5 до 2".
Есть следующий код:
прм1=3.515;
рез1=Окр(прм1,2,1);
Сообщить(прм1);
Сообщить(рез1);
прм2=21.09*(20/120);
рез2=Окр(прм2,2,1);
Сообщить(прм2);
Сообщить(рез2);
Результат:
прм1 = 3.515
рез1 = 3.52
прм2 = 3.515
рез2 = 3.51
т.е. во втором случае отчего-то происходит неправильное округление вполне "правильного" аргумента.
Отчего это, и как это побороть ? Поможет ли переход на другой релиз ? (попробовать самому нет сейчас никакой возможности) Или это фича такая ? :)
Спасибо.
Хряк
1 - 20.06.2004 - 15:28
Рел. 21, дбф, - та же лажа. :(
Чудно!!!
NS
2 - 20.06.2004 - 15:32
мало вас в детстве били!!!
А попробуй -
прм2=21.09*20/120;
-без скобок!!!!!!!!!!!!!!!!!Ё
android
3 - 20.06.2004 - 15:35
окр(21.09*(20/120),2,1) в 7.7 выдает 3.51
окр(21.09*(20/120),2,1) в 8.0 выдает 3.52
NS
4 - 20.06.2004 - 15:37
(3) Никто в школе не учился? Округление проходили там...
Глюк не в 7.7, а в мозгах... еще раз - скобки нужно убрать....
Хряк
5 - 20.06.2004 - 15:42
NS, ну-ка напомни правила округления :).
Не знал, не знал и забыл.
android
6 - 20.06.2004 - 15:57
(4) "Глюк не в 7.7"
так, соображаем:
7.7 выдает 3.51, это не глюк, 8.0 выдает 3.52, значит 8.0 глючит :)
NS, расслабься!
мовин
7 - 20.06.2004 - 15:58
(2) Ничего из-за скобок, естественно, не меняется в результате. Добавляю варианты:
прм3=20/120*21.09;
рез3=Окр(прм2,2,1);
Сообщить(прм3);
Сообщить(рез3);
прм4=21.09*20/120;
рез4=Окр(прм2,2,1);
Сообщить(прм4);
Сообщить(рез4);
прм3 = прм4 = 3.515
рез3 = рез4 = 3.51
:(
syktyk
8 - 20.06.2004 - 16:01
2(7) А ты множители-то не передергивай, не передергивай....
мовин
9 - 20.06.2004 - 16:10
(8)
тут предергивай - не передергивай ... результат аналогичен.
android
10 - 20.06.2004 - 16:13
(7)
в 7.7 "окр(21.09*20/120,2,1)" в табло выдает 3.52
мовин
11 - 20.06.2004 - 16:21
(10) точно. ошибся я. стар уже стал :( Действительно, окр(21.09*20/120,2,1)=3.52 . Только от этого не легче:
20/120*21.09=3.515 а окр (20/120*21.09)= 3.51
А еще говорят, что от перемены мест множителей произведение не меняется :)
bazvan
12 - 20.06.2004 - 16:22
Пля обсуждалось тыщя пятьсот милионов раз. В архив лезте
Такойже глюки все отсальные проги дают
green
13 - 20.06.2004 - 16:23
типизирование, вроде как неявное...
мовин
14 - 20.06.2004 - 17:23
(12)
Нету в архиве по ЭТОЙ теме ничего.
Да и, собственно, если вопрос настолько "изжеван" - Вам не проще привести ссылку, по которой можно найти более содержательный ответ ? Спасибо.
android
15 - 20.06.2004 - 18:50
(14) Чего еще осталось непонятного? Фича такая.
toypaul
16 - 20.06.2004 - 18:50
(4) нас в школе учили что в этом случае результат от скобок не зависит.
(12) а вот и ни*уя. дают только криво написанные проги. буквально месяц полтора назда обнаружился подобный глюк в 7.7, который перешел и в 8.0. пришлося немножко "полечить" коллективными усилиями.
android
17 - 20.06.2004 - 18:53
(16) Это уже не математика, а программирование, и тут уже надо учитывать особенности вычислений на ЭМВ и глю.., простите, "особенности" некоторых программ.
Ена
18 - 20.06.2004 - 18:57
мне думается, что дело в представлении десятичного числа типа 3.515 как 3.5149999999999999999999 после арифметических операций. Трудно сказать - как бороться...
ОбезьянаСГранатой
19 - 20.06.2004 - 19:02
эту фичу можно обойти, например, так: использовать не окр(А,КолЗнаков,1),
а окр(окр(А,КолЗнаков+2,1),колЗнаков,1)
Ена
20 - 20.06.2004 - 19:03
хотя нет - тогда всё получится при цельночисленном умножении, стоящим ПОСЛЕДНИМ, например:
21.09/120*20
как бы проверить?

К списку вопросов на форуме 1C

>>