![]() |
![]() |
мовин 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 как бы проверить? |