Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Фигня какая-то. Машинный ноль?

v7: Фигня какая-то. Машинный ноль?
Я
   ik
 
29.11.17 - 20:15
"Адаптировал" сейчас внешнюю печатную форму УПД к старенькой-переддоделанной ТиС. Наткнулся на то, что не всегда выполняется условие сравнения с 0. Аж глазам не поверил - проверил даже тип значения в отладчике - всё по честному: число, 0, но условие на <= 0 не выполняется.
Пришлось сравнивать с 0.00001
 
 
   mehfk
 
1 - 29.11.17 - 20:23
А ты подготовь пример, чтобы любой мог проверить.
   ik
 
2 - 29.11.17 - 20:37
Боюсь, не получится. Из 7 строк "тестовой" накладной, проблема возникала на одной (забавно, но на первой)
Вот здесь условие выполнялось при ОстКолво=0 (по отладчику и по смыслу):
    Если (ОстКолво > 0)
        и (ОстКолво < ВсегоКол)
    Тогда
   Злопчинский
 
3 - 29.11.17 - 20:38
(2) имхо вы заблуждаетесь
   ik
 
4 - 29.11.17 - 20:39
И вот здесь
    Если ТаблицаГТД.Количество <= 0 Тогда
   ik
 
5 - 29.11.17 - 20:40
Как уже говорил, вылечил заменив 0 на 0.00001
   mishaPH
 
Модератор
6 - 29.11.17 - 20:42
(5) бред какой-то. никогда так не делал
   ik
 
7 - 29.11.17 - 20:42
XEON E5-2620
   1c-bs
 
8 - 29.11.17 - 20:43
(7) Вирус?
   ik
 
9 - 29.11.17 - 20:44
(6) А как? В поисках я даже через ПустоеЗначение() прошел. Увы - тоже давало 0.
   ik
 
10 - 29.11.17 - 20:44
(8) Кхм.. Маловероятно, но.. Сейчас проверю.
 
 Рекламное место пустует
   mishaPH
 
Модератор
11 - 29.11.17 - 20:49
(9) всегда сравниваю все с 0 во всех конструкциях.
   mishaPH
 
Модератор
12 - 29.11.17 - 20:50
ВсегоКол или ост может не число?

все значения в Число(ВсегоКол)  сделай проверь
   mishaPH
 
Модератор
13 - 29.11.17 - 20:51
точнее все что с чем сравниваешь приведи к числу
   ik
 
14 - 29.11.17 - 20:58
KVRT вирусов не нашёл.
(12) - в первом сообщении ч писал
>проверил даже тип значения в отладчике - всё по честному: число, 0
   ik
 
15 - 29.11.17 - 21:02
Ладно, что есть,то есть. Удивило изрядно.
   1c-bs
 
16 - 29.11.17 - 21:04
(0) А что в таблицах лежит? 0 или 0,00001?
   ik
 
17 - 29.11.17 - 21:18
(16) По смыслу - 0 (результат вычитания из 20 штук 20). Отладчик кажет 0. Что "думают" об этом процессор и платформа - не знаю.
   Злопчинский
 
18 - 30.11.17 - 00:37
Ну проверь на другом сервакн
   VladZ
 
19 - 30.11.17 - 04:43
(0) Скорей всего в базе где-то лежит именно "0.00001". Либо найди, откуда это "пришло". Либо при проверке округляй до 3го знака.
   Mr_Rm
 
20 - 30.11.17 - 10:07
Если проблема только на первой строке, то вероятно, что где-то неинициализированная переменная. Имя "ОстКолво" везде одинаково написано, без латинских букв?
Чему равны Строка(ОстКолво) и ОстКолво*100000? Что, если сравнивать с 0.0001, 0.001 и т.д.?
   skafandr
 
21 - 30.11.17 - 10:15
(0)конь в вакууме? Удивляться можно только в варианте штучного товара.Если же количество в каких-то местах пересчитывается и с полной точностью и не округляется то 0.00001 получается очень легко.
   Масянька
 
22 - 30.11.17 - 10:19
(17) По смыслу - нужно проверять...
Поясняю: там везде идет пересчет (и кол-ва, и суммы). Опытным путем уже было установлено, что результат пересчета получается безо всяких округлений, а округляется уже потом.
Судя по всему - где-то зависает эта единица (в периоде после запятой), а при перерасчете вылазит (см. (19)).
Ну, и как вариант - допилить пересчеты (проверка кол-ва/суммы на последнее (т. е. остаток = списать) и списывать без перерасчета.
   Dump
 
23 - 02.12.17 - 09:41
""Адаптировал" сейчас внешнюю печатную форму УПД к старенькой-переддоделанной ТиС."
Имеем 2 неизвестных - переписанную базу и переделанную ВПФ. Что тут можно посоветовать? Это даже не телепат - телепаь в квадрате  ;-)
   mexanik_96
 
24 - 02.12.17 - 10:10
(0) дефайн 0 0.00001
   Z1
 
25 - 02.12.17 - 10:18
(0) Типы надо приводить к одному виду
Если 99% интерпритатор это за Вас делает правильно
это не значит что в оставшемся  1% результат тоже будет правильным.
Это касается любых языков программирования а не только 1с
Т.е в 2 надо написать
Если (ОстКолво > 0.0)


Еще возможная  причина если у Вас на форме определен
ОстКолво  как 15.2 то
при занесении в ОстКолво числа 0.000001
в ОстКолво занесется 0.0
   Otark
 
26 - 02.12.17 - 10:38
(25)>>Т.е в 2 надо написать Если (ОстКолво > 0.0)
можно рекомендацию от 1с где это написано. Я просто не разу не видел в типовых такого сравнения. Я вообще первый раз слышу что в 1с число может быть целым или дробным как в других ЯП. И значит у меня должна быть возможность привести переменную к этому типу?
   nordbox
 
27 - 02.12.17 - 10:47
в других языках есть Integer и Real
в 1с есть просто Число но у него есть формат числа.
   Z1
 
28 - 02.12.17 - 10:49
(26) Причем тут 1с в машинных кодах процессора число или целое или вещественное и это число имеет определенную длину (разрядность )

тоже само скажи
Если  ( 10/3) * 3 = 10.0 Тогда
Сообщить("Равно");
Иначе
Сообщить("Не равно");
КонецЕсли;

Какой будет результ. В общем случае результат неопределен
непредсказуем и завист от конкретной РЕАЛИЗАЦИИ языка на машинные коды
   Dump
 
29 - 02.12.17 - 10:59
Про другие языки не скажу - только 1с 7.7
"Еще возможная  причина если у Вас на форме определен
ОстКолво  как 15.2 то
при занесении в ОстКолво числа 0.000001
в ОстКолво занесется 0.0"
Самая вероятная ошибка - сначала округление, потом сравнение

"Если (ОстКолво > 0.0) " - в 1с не имеет смысла, результат будет тот же, что и Если (ОстКолво > 0)

"Если  ( 10/3) * 3 = 10.0 Тогда
Сообщить("Равно");
Иначе
Сообщить("Не равно");
КонецЕсли;"
Результатом всегда будет "Не равно", ибо левая часть никогда не округлится до целого числа (10.0)
   73с
 
30 - 02.12.17 - 14:54
0+ОстКолво


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует