|   |   | 
| 
 | v7: Почему не равно? | ☑ | ||
|---|---|---|---|---|
| 0
    
        Масянька 15.01.14✎ 11:23 | 
        Доброе утро!
 Чёт мне кажется, что я сошла с ума..... Процедура Анализ() Если СуммаОстаткиТМЦ = СуммаПоПартиямТМЦ Тогда Форма.НадписьСуммаОстаткиТМЦ.Цвет(0, 0, 128); Форма.НадписьСуммаПоПартиямТМЦ.Цвет(0, 0, 128); Иначе Форма.НадписьСуммаОстаткиТМЦ.Цвет(255, 0, 0); Форма.НадписьСуммаПоПартиямТМЦ.Цвет(255, 0, 0); КонецЕсли; КонецПроцедуры // Анализ Выводит: ост = 947211.85, парт = 947211.85 ост = Число, парт = Число не равно (вставила сообщить). Почему не равно-то? Спасибо. | |||
| 82
    
        Масянька 15.01.14✎ 11:57 | 
        Ладно, пусть не 2 после запятой.
 Почему выводит (без округления) всего 2? (80) Однозначно! | |||
| 83
    
        zak555 15.01.14✎ 11:57 | 
        (80) что это ?     | |||
| 84
    
        Масянька 15.01.14✎ 11:57 | 
        (75) А не красивой не стал бы помогать :(     | |||
| 85
    
        Bigbro 15.01.14✎ 11:57 | 
        (82) а вот на этот вопрос кроме разработчиков 1с вряд ли кто то ответит..     | |||
| 86
    
        Wobland 15.01.14✎ 11:57 | 
        (82) поэтому и растут волосы на руках у тех, кто сообщает     | |||
| 87
    
        VladZ 15.01.14✎ 11:58 | 
        (82) Нужно смотреть, откуда у тебя взялось это число. Может ты запросом получала (там одна точность), а потом в ТЗ выгружала (там другая точность).     | |||
| 88
    
        Масянька 15.01.14✎ 11:59 | 
        (85) Феерично :)
 (87) Там довольно сложно: запрос, доп. расчеты, остатки.... Не выгружала. | |||
| 89
    
        Масянька 15.01.14✎ 12:00 | 
        Ладно, дядьки - СПАСИБО!
 Всем чмоки :))) | |||
| 90
    
        ЧеловекДуши 15.01.14✎ 12:02 | 
        (88) Запрос покажи :)     | |||
| 91
    
        Масянька 15.01.14✎ 12:02 | 
        (77) А скрины - жду...     | |||
| 92
    
        zak555 15.01.14✎ 12:07 | 
        за свою жизнь лично видел только одну девушку, которую можно назвать программист     | |||
| 93
    
        ЧеловекДуши 15.01.14✎ 12:11 | 
        (92) Ну и как она тебе?     | |||
| 94
    
        zak555 15.01.14✎ 12:12 | 
        (93) так же был удивлён, что ум и красота на месте     | |||
| 95
    
        Масянька 15.01.14✎ 12:13 | 
        (77) Так ждать?     | |||
| 96
    
        aka AMIGO 15.01.14✎ 12:13 | 
        (89) для начала - в конфигураторе ставишь курсор приблизительно туда, где интересное место в коде
 далее - нажимаешь на иконку внизу: http://gyazo.com/17067361f6190f60232231cc7dbd0f81 попадаешь в отладчик, курсор стоит на нужном тебе месте. далее жмакаешь 2 раза на желтой вертикальной полоске напротив строки, где тебе надо остановить выполнение: http://gyazo.com/bb4fa1d650782f11e6bd59d88109c2ea дальше - открываешь табло, жмакнув на иконке вверху: http://gyazo.com/0c794fb477f98c07902cd07d63b73073 в окне табло печатаешь имя переменной, или копипастишь его из окна кода: http://gyazo.com/4ae07e302d918eb371d0ecda3be6841f | |||
| 97
    
        aka AMIGO 15.01.14✎ 12:13 | 
        (95) торопишь меня :) жди :)     | |||
| 98
    
        Масянька 15.01.14✎ 12:14 | 
        (97) Окей! Прости :) 
 PS Люблю. Жду. Лена (С) | |||
| 99
    
        dedmoroz777 15.01.14✎ 12:19 | 
        (98) Не мешай! Все ждут)     | |||
| 100
    
        Масянька 15.01.14✎ 12:19 | 
        Мне?     | |||
| 101
    
        1dvd 15.01.14✎ 12:23 | 
        Я не понял. Она стукнулась или нет?     | |||
| 102
    
        Simod 15.01.14✎ 12:24 | 
        Сообщить(?(Цел(СуммаОстаткиТМЦ*100)/100 = СуммаОстаткиТМЦ, "Равно", "Не равно"));
 Сообщить(?(Цел(СуммаПоПартиямТМЦ*100)/100 = СуммаПоПартиямТМЦ, "Равно", "Не равно")); | |||
| 103
    
        aka AMIGO 15.01.14✎ 12:25 | 
        +96 идешь в 1С-Предприятие, вызываешь на выполнение свой отчет:
 http://gyazo.com/7fb44e92d8654d683b06613a02c237b1 автоматом попадаешь в отладчик, в котором видно каретку, - останов в указанной тобой точке: http://gyazo.com/b6764eef8e8a0e762699879c97c9d428 а в табло видишь значения переменных, как раз на момент в точке останова.. итого - выбирай место останова, ставь точку останова, запускай программку, наслаждайся результатами :) Для управления выполненим программы - иконки на верхней границе окна отладчика Для продолжения по шагам - нажимай иконку: http://gyazo.com/c19881be73ea1143b6e9349d7bd0919e Для завершения - одну из двух: http://gyazo.com/6c08a6ec9c035aee172f92be4c353574 вроде всё :) успеха! :) | |||
| 104
    
        aka AMIGO 15.01.14✎ 12:26 | 
        (101) "не дождетесь!" © :)     | |||
| 105
    
        Масянька 15.01.14✎ 12:28 | 
        (103) Огромное СПАСИБО! Персональные чмоки :)))))))))
 Щас в ворд сложу, картинки вставлю. Короче, кому надо потом будет - говорите. Автор - aka AMIGO, редактор - я :)))) | |||
| 106
    
        Torquader 15.01.14✎ 12:34 | 
        Кстати, для тех, кто хочет понять - в чём дело.
 1С к точности дробной части относится очень "сурово" // проверка точности 1С A=1; B=1; I=1; Пока 1=1 Цикл C=A+B; Если C=A Тогда Сообщить("Обнаружена точность:B="+Строка(B)); Прервать; КонецЕсли; Если I>1000 Тогда Сообщить("Превысили допустмый предел:С="+Строка(C)+",A="+Строка(A)); Прервать; КонецЕсли; B=B*0.1; I=I+1; КонецЦикла; Выводит: Превысили допустмый предел:С=1,A=1 То есть система может отслеживать 1000 знаков ? | |||
| 107
    
        aka AMIGO 15.01.14✎ 12:36 | 
        (105) пожалуйста :)
 кстати, в табло можно помещать и функции/операторы, чтобы увидеть из результаты: http://gyazo.com/9c83b3f3e8adb9e4adf826896aad26d6 | |||
| 108
    
        Масянька 15.01.14✎ 12:39 | 
        (106) За все время - впервые с таким столкнулась. Предупреждать надо :(     | |||
| 109
    
        Torquader 15.01.14✎ 12:40 | 
        (106) Хотя, в некоторых операциях 1С "ошибается":
 A=2; B=3; C=A/B; D=C*10000000000000000000000000000000000000000000000000; Сообщить("D="+Строка(D)); Получаем: D=6666666666666666666666666660000000000000000000000 То есть точность 27 знаков. | |||
| 110
    
        Сисой 15.01.14✎ 12:40 | 
        (0) В Такси! Только в такси!     | |||
| 111
    
        Torquader 15.01.14✎ 12:41 | 
        (108) Вообще, не знаю как в 1С, но в других системах, если мне нужна точность, то я считают в целых числах, смещённых до нужной точности - тогда гарантированно два числа будут совпадать, если они и на выводе совпали.     | |||
| 112
    
        Torquader 15.01.14✎ 12:41 | 
        (110) Думаешь, что там движок вычислений сильно переписали ?     | |||
| 113
    
        Масянька 15.01.14✎ 12:42 | 
        (111) Об том и речь - я получила числа, ничего с ними не делала, пытаюсь сравнить. Даже на экран вывела :(     | |||
| 114
    
        zak555 15.01.14✎ 12:44 | 
        (110) это ответственная работа     | |||
| 115
    
        1dvd 15.01.14✎ 12:45 | 
        Если женщина по определению не может быть программистом, думаете, она может быть таксистом?     | |||
| 116
    
        catena 15.01.14✎ 12:46 | 
        (113), как это ничего не делала, когда (88)?     | |||
| 117
    
        aka AMIGO 15.01.14✎ 12:48 | 
        забавна работа оператора Окр() с точностью до 2-х знаков после запятой:
 http://gyazo.com/7437221f177fc103545cbdf270bfbbbd | |||
| 118
    
        Torquader 15.01.14✎ 12:49 | 
        (115) Да быть можем всем, чем угодно, только вот хорошим программистом, как и хорошим таксистом - вряд ли - да и среди мужчин хороших программистов тоже не очень много.     | |||
| 119
    
        aka AMIGO 15.01.14✎ 12:49 | 
        +117 вроде бы должны быть равны, ан нет! :)     | |||
| 120
    
        Torquader 15.01.14✎ 12:50 | 
        (117) Нет, а что ты хотел - это же округление, а не отбрасывание дробной части.
 Там же ещё параметр есть, как округлять 1.5 в 2 или в 1. | |||
| 121
    
        Bigbro 15.01.14✎ 12:51 | 
        117 с чего бы они должны быть равны?     | |||
| 122
    
        Torquader 15.01.14✎ 12:51 | 
        (119) Меня больше 106 поразило - проверка точности алгоритма, знакомая со времён ассемблера, показала, что в 1С про ассемблер и сопроцессор не слышали.     | |||
| 123
    
        Torquader 15.01.14✎ 12:52 | 
        (121) С точки зрения программиста 1С, видимо.     | |||
| 124
    
        aka AMIGO 15.01.14✎ 12:53 | 
        (118) я встретил двух женщин-программисток, обе были программистки искрой божьей ..
 работали мы в ВЦ, на ЕС-1020, делали огромадные расчеты, девушки справлялись запросто. (121) в принципе принимается значение, установленное в окне свойств конфигурации. У меня - типовые настройки (123) кхм.. :) | |||
| 125
    
        aka AMIGO 15.01.14✎ 12:54 | 
        (120) точно, друже :)     | |||
| 126
    
        Масянька 15.01.14✎ 12:57 | 
        Да о чем вы? :))))
 Меня в ступор просто вогнало: получила число, вывела на экран - а это не то число... | |||
| 127
    
        CaMoJleT 15.01.14✎ 12:58 | 
        (126) Удивительное рядом :)     | |||
| 128
    
        aka AMIGO 15.01.14✎ 13:00 | 
        (122) да слышали они, конечно..
 однозначно сталкивались в Си с точностью и двойной точностью числовых переменных это и есть ограничение, следствие которого видно как раз в (109) | |||
| 129
    
        aka AMIGO 15.01.14✎ 13:02 | 
        +128 я уже не помню, увы, порядок двойной точности.. восьмеричный код там     | |||
| 130
    
        Torquader 15.01.14✎ 13:10 | 
        (126) Это вы с числами double не работали - я, например, в научной работе их "сравнивал" побайтово - тогда действительно была гарантия, что числа совпадают только тогда, когда их представления совпадают.
 А вывод на экран - он никогда правильно не работает. | |||
| 131
    
        Принт 15.01.14✎ 13:12 | 
        (130) и то, есть вероятность натолкнуться на +0/-0 )     | |||
| 132
    
        Torquader 15.01.14✎ 13:13 | 
        (128) В (109) Показано, что результат операции деления просто получают из сопроцесссора, у которого точность где-то 17-18 знаков в дробной части.
 А вот сложение, видимо, они отработали, как умели. | |||
| 133
    
        Torquader 15.01.14✎ 13:14 | 
        (131) С точки зрения математики - это два разных числа, так что не страшно.     | |||
| 134
    
        aka AMIGO 15.01.14✎ 13:15 | 
        (132) или "как смогли" :)     | |||
| 135
    
        Принт 15.01.14✎ 13:15 | 
        (133) впервые слышу     | |||
| 136
    
        Bigbro 15.01.14✎ 13:19 | 
        (126) у Козьмы Пруткова в практике помнится был аналогичный случай .. ))     | |||
| 137
    
        Масянька 15.01.14✎ 13:20 | 
        Итак, в отладчике показывает
 СуммаОстаткиТМЦ = 947228.01 СуммаПоПартиямТМЦ = 947228.01 И что же я должна думать? | |||
| 138
    
        Wobland 15.01.14✎ 13:22 | 
        (137) перенеси остатки в БП 3.0 и там посчитай     | |||
| 139
    
        Масянька 15.01.14✎ 13:22 | 
        Кстати, остановка стоит тут -     Если Окр(СуммаОстаткиТМЦ,2) = Окр(СуммаПоПартиямТМЦ,2) Тогда    
 А выводит то, что реально или округленное? | |||
| 140
    
        Torquader 15.01.14✎ 13:22 | 
        (137) Если тебе хочется, чтобы числа сравнивались, как на экране (что, для некоторых людей вполне логично), то пиши просто: Если Строка(СуммаОстаткиТМЦ)=Строка(СуммаПоПартиямТМЦ)Тогда
 Конечно, математики за такое яйца оторвут, но вам это не грозит. | |||
| 141
    
        Принт 15.01.14✎ 13:22 | 
        (137) 1С - 3,1421-ы     | |||
| 142
    
        Torquader 15.01.14✎ 13:23 | 
        (135) При рассмотрении пределов важно +0 или -0.
 И при точном сравнении, если А>B, то A-B не может быть -0. | |||
| 143
    
        Масянька 15.01.14✎ 13:24 | 
        (140) Мне надо правильно :(
 (141) Пушистая северная лисичка :( | |||
| 144
    
        Bigbro 15.01.14✎ 13:24 | 
        выводит то что в отладчике запрошено. можно любые формулы ввести в табло в том числе с округлениями.     | |||
| 145
    
        Масянька 15.01.14✎ 13:25 | 
        (144) В табло забила:      
 СуммаОстаткиТМЦ СуммаПоПартиямТМЦ | |||
| 146
    
        Simod 15.01.14✎ 13:26 | 
        (137) Перезагрузись.
 Код из (102) проверяла? | |||
| 147
    
        Bigbro 15.01.14✎ 13:32 | 
        хотя с другой стороны отладчик писали те же люди из 1с ... ))     | |||
| 148
    
        alexiv79 15.01.14✎ 13:35 | 
        (145) Попробуй каждое число умножить допустим на 100 000 и сравнить     | |||
| 149
    
        alexiv79 15.01.14✎ 13:36 | 
        +(148) СуммаОстаткиТМЦ и СуммаПоПартиямТМЦ - это реквизиты или переменные?     | |||
| 150
    
        Масянька 15.01.14✎ 13:37 | 
        (149) Уже переменные.     | |||
| 151
    
        Принт 15.01.14✎ 13:38 | 
        (142) тогда почему операция сравнения в сопроцессоре говорит -0 == +0? )     | |||
| 153
    
        ЧеловекДуши 15.01.14✎ 13:38 | 
        (150) Уже, в какой именно момент наступило? :)
 Покажи весь код :) Лучше выложи обработку на файло помойку... | |||
| 154
    
        aka AMIGO 15.01.14✎ 13:39 | 
        (139) - в окне сообщений - округленные, а в отладчике - реальные     | |||
| 155
    
        Torquader 15.01.14✎ 14:13 | 
        (151) С точки зрения работы сопроцессора - да - это нули.
 С точки зрения стандарта представления чисел - это разные записи. P.S. там ещё и не число есть, если кому интересно. | |||
| 156
    
        Torquader 15.01.14✎ 14:21 | 
        (150) Вот тебе функция, которая показывает, что внутри числа:
 Функция ВывестиЧислоКакЕсть(пчЧислоДляВывода) лчЦелаяЧасть=Окр(пчЧислоДляВывода,0,1); Если лчЦелаяЧасть>пчЧислоДляВывода Тогда лчЦелаяЧасть=лчЦелаяЧасть-1;КонецЕсли; лстрСтрокаЧисла=Строка(лчЦелаяЧасть)+"."; лчДробнаяЧасть=пчЧислоДляВывода-лчЦелаяЧасть; Пока лчДробнаяЧасть<>0 Цикл лчДробнаяЧасть=лчДробнаяЧасть*10; лчЦелаяЧасть=Окр(лчДробнаяЧасть,0,1); Если лчЦелаяЧасть>лчДробнаяЧасть Тогда лчЦелаяЧасть=лчЦелаяЧасть-1;КонецЕсли; лстрСтрокаЧисла=лстрСтрокаЧисла+Строка(лчЦелаяЧасть); лчДробнаяЧасть=лчДробнаяЧасть-лчЦелаяЧасть; КонецЦикла; Возврат лстрСтрокаЧисла; КонецФункции Попробуй вывести свои две переменные через неё - увидишь что-то интересное. | |||
| 157
    
        Принт 15.01.14✎ 14:23 | 
        (155) поднял http://ru.math.wikia.com/wiki/Отрицательный_и_положительный_ноль
 + https://ru.wikipedia.org/wiki/Отрицательный_и_положительный_ноль с этой точки зрения -0, +0, 0 - различные, не смешиваемые в одной куче сущности | |||
| 158
    
        alexiv79 15.01.14✎ 14:27 | 
        (150) Могу ошибаться, но по-моему тема такая - в реквизите ставишь формат 15.2. Он подставляет реальное число в реквизит - допустим 15.078000, но показывать будет все равно 15.08     | |||
| 159
    
        Torquader 15.01.14✎ 14:32 | 
        (158) После того, как "реальное" число было присвоено реквизиту с точностью 15.2, в нём будет лежать число с точностью 15.2 вне зависимости от того, что в него положили.
 С ячейками таблицы значений, для которых задан тип и точность, происходит тоже самое. | |||
| 160
    
        Torquader 15.01.14✎ 14:35 | 
        (157) Меня больше удивило, что (156) показало сто нулей после запятой и одну единицу в моём примере из (106), правда я I уменьшил до ста.
 Вывод - на 1С можно делать математические расчёты ничего не зная про проблемы вычислений с плавающей точкой на компьютерах (в отличие от Excel, которая в трёх знаках уже врёт). | |||
| 161
    
        Масянька 15.01.14✎ 14:35 | 
        (156) Спасибо - попробую.
 (158) Переменные (в модуле обработки). Формат на них не накладывался. Кстати, попробовала (102): СуммаОстаткиТМЦ - не равно, СуммаПоПартиямТМЦ - равно. | |||
| 162
    
        alexiv79 15.01.14✎ 14:35 | 
        (159) Понятно - ну так значит так. Вот только вопрос - если это реквизиты - почему сумма не сходится? Если в сообщении выводится "ост = 947211.85, парт = 947211.85"     | |||
| 163
    
        Принт 15.01.14✎ 14:37 | 
        (160) меня удивляет, почему они при этом заставляют работать с дробями как на сопре     | |||
| 164
    
        Масянька 15.01.14✎ 14:39 | 
        (156) Вот что вернуло:
 остатки = 947211.849999999999999999999999997999994279 партии = 947211.85 | |||
| 165
    
        Масянька 15.01.14✎ 14:40 | 
        +(164) Но в отладчике - другие цифры (гы-гы-гы).
 По-моему, как раз в (156) и есть нормальный отладчик (для данной ситуации). СПАСИБО!!!!!!!!! | |||
| 166
    
        Масянька 15.01.14✎ 14:47 | 
        (156) Вот это - настоящий инженер!
 PS На первом курсе универа: по вышке были какие-то расчеты по таблицам Брадисам. Не получается и все тут. Иду к соседу. А он еще не начал это задание делать. А к нему приехал старший брат (2 года назад окончил наш универ по ТММ). Брат - лежит в постели, читает какую-то книжку. Брат говорит: "Давай сюда свое задание." Читает, думает около 2 минут и выдает ответ. Я ошалело говорю соседу: "Вот это - настоящий инженер!". | |||
| 167
    
        Torquader 15.01.14✎ 14:58 | 
        (166) Ладно - вы с восьмёркой познакомитесь - будете вывод числа в строку переписывать, чтобы без пробелов было.
 Потому как ЧРГ=;нифига не отключает, хотя, вроде бы ЧГ=0; помогает. | |||
| 168
    
        Масянька 15.01.14✎ 15:19 | 
        (167) Пройденный этап :) Но я снеговика не люблю....     | |||
| 169
    
        ЧеловекДуши 15.01.14✎ 15:21 | 
        (167) В 8-ке свои грабли :)     | |||
| 170
    
        ЧеловекДуши 15.01.14✎ 15:21 | 
        (164) Ну вот, опять чудо не получилось :)     | |||
| 171
    
        Torquader 16.01.14✎ 11:22 | 
        Кстати, не стоит пробовать вывести через (156) отрицательные числа - для способных предлагается доработать функцию под вывод отрицательных чисел.     | |||
| 172
    
        Масянька 16.01.14✎ 12:29 | 
        Ну, раз вы не унимаетесь: мне все-таки очень интересно - где хранится реальное число?
 Сообщить, в том числе и преобразованное в строку, отладчик - выводят всего 2 цифры. А сравнивает - реальное число. Где оно лежит?! | |||
| 173
    
        VladZ 16.01.14✎ 14:46 | 
        (172) Не поверишь - в памяти! :)     | |||
| 174
    
        Torquader 16.01.14✎ 14:51 | 
        (172) Причём, похоже, что в целом виде с отдельным указанием порядка - скорость работы с такими числами возрастает пропорционально их длине - это я вчера проверял.
 Так что, в этом случае, 1С заслуживает уважения - потери точности практически не происходит. | |||
| 175
    
        Принт 16.01.14✎ 14:55 | ||||
| 176
    
        Масянька 16.01.14✎ 15:00 | 
        (173) Ага - не поверю :))))
 ИМХО, это и есть моветон: пользователь может увидеть только 2 цифры после запятой, а реально сравнивается 20 цифр после запятой. (174) Ну, да. Сколько лет работаю - впервые наступила на эти грабли. И не один раз сравнивала суммы. | |||
| 177
    
        Пятничник 16.01.14✎ 16:41 | 
        (80) (83) вот и выросло поколение одинэсников, которые не знают, что такое clipper... :-)     | |||
| 178
    
        aka AMIGO 16.01.14✎ 16:49 | 
        (177) да просто за ненадобностью :)     | |||
| 180
    
        Пятничник 16.01.14✎ 16:58 | 
        (172) правильный вопрос - не ГДЕ оно хранится, а КАК.
 В Клиппере (и ДБФ) были указатели точности хранения (количество десятичных знаков). в 1С решили обойтись без них (хотя вроде в 8.3 экспериментируют с ними). (176) если б у вас только сумма и произведение были - было бы легче, но если хотя бы 1 раз возникает деление - точность результата не столь очевидна. | |||
| 181
    
        Torquader 16.01.14✎ 21:05 | 
        (180) Одно дело - в базе данных - там точность чисел ограничена, а в памяти - каждый может хранить всё, что хочет.
 Стандартная ситуация - умножение на количество и деление на другое количество - и чаще всего - ошибка округления. | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |