|
v7: Фигня какая-то. Машинный ноль? | ☑ | ||
---|---|---|---|---|
0
ik
29.11.17
✎
20:15
|
"Адаптировал" сейчас внешнюю печатную форму УПД к старенькой-переддоделанной ТиС. Наткнулся на то, что не всегда выполняется условие сравнения с 0. Аж глазам не поверил - проверил даже тип значения в отладчике - всё по честному: число, 0, но условие на <= 0 не выполняется.
Пришлось сравнивать с 0.00001 |
|||
1
mehfk
29.11.17
✎
20:23
|
А ты подготовь пример, чтобы любой мог проверить.
|
|||
2
ik
29.11.17
✎
20:37
|
Боюсь, не получится. Из 7 строк "тестовой" накладной, проблема возникала на одной (забавно, но на первой)
Вот здесь условие выполнялось при ОстКолво=0 (по отладчику и по смыслу): Если (ОстКолво > 0) и (ОстКолво < ВсегоКол) Тогда |
|||
3
Злопчинский
29.11.17
✎
20:38
|
(2) имхо вы заблуждаетесь
|
|||
4
ik
29.11.17
✎
20:39
|
И вот здесь
Если ТаблицаГТД.Количество <= 0 Тогда |
|||
5
ik
29.11.17
✎
20:40
|
Как уже говорил, вылечил заменив 0 на 0.00001
|
|||
6
mishaPH
модератор
29.11.17
✎
20:42
|
(5) бред какой-то. никогда так не делал
|
|||
7
ik
29.11.17
✎
20:42
|
XEON E5-2620
|
|||
8
1c-bs
29.11.17
✎
20:43
|
(7) Вирус?
|
|||
9
ik
29.11.17
✎
20:44
|
(6) А как? В поисках я даже через ПустоеЗначение() прошел. Увы - тоже давало 0.
|
|||
10
ik
29.11.17
✎
20:44
|
(8) Кхм.. Маловероятно, но.. Сейчас проверю.
|
|||
11
mishaPH
модератор
29.11.17
✎
20:49
|
(9) всегда сравниваю все с 0 во всех конструкциях.
|
|||
12
mishaPH
модератор
29.11.17
✎
20:50
|
ВсегоКол или ост может не число?
все значения в Число(ВсегоКол) сделай проверь |
|||
13
mishaPH
модератор
29.11.17
✎
20:51
|
точнее все что с чем сравниваешь приведи к числу
|
|||
14
ik
29.11.17
✎
20:58
|
KVRT вирусов не нашёл.
(12) - в первом сообщении ч писал >проверил даже тип значения в отладчике - всё по честному: число, 0 |
|||
15
ik
29.11.17
✎
21:02
|
Ладно, что есть,то есть. Удивило изрядно.
|
|||
16
1c-bs
29.11.17
✎
21:04
|
(0) А что в таблицах лежит? 0 или 0,00001?
|
|||
17
ik
29.11.17
✎
21:18
|
(16) По смыслу - 0 (результат вычитания из 20 штук 20). Отладчик кажет 0. Что "думают" об этом процессор и платформа - не знаю.
|
|||
18
Злопчинский
30.11.17
✎
00:37
|
Ну проверь на другом сервакн
|
|||
19
VladZ
30.11.17
✎
04:43
|
(0) Скорей всего в базе где-то лежит именно "0.00001". Либо найди, откуда это "пришло". Либо при проверке округляй до 3го знака.
|
|||
20
Mr_Rm
30.11.17
✎
10:07
|
Если проблема только на первой строке, то вероятно, что где-то неинициализированная переменная. Имя "ОстКолво" везде одинаково написано, без латинских букв?
Чему равны Строка(ОстКолво) и ОстКолво*100000? Что, если сравнивать с 0.0001, 0.001 и т.д.? |
|||
21
skafandr
30.11.17
✎
10:15
|
(0)конь в вакууме? Удивляться можно только в варианте штучного товара.Если же количество в каких-то местах пересчитывается и с полной точностью и не округляется то 0.00001 получается очень легко.
|
|||
22
Масянька
30.11.17
✎
10:19
|
(17) По смыслу - нужно проверять...
Поясняю: там везде идет пересчет (и кол-ва, и суммы). Опытным путем уже было установлено, что результат пересчета получается безо всяких округлений, а округляется уже потом. Судя по всему - где-то зависает эта единица (в периоде после запятой), а при перерасчете вылазит (см. (19)). Ну, и как вариант - допилить пересчеты (проверка кол-ва/суммы на последнее (т. е. остаток = списать) и списывать без перерасчета. |
|||
23
Dump
02.12.17
✎
09:41
|
""Адаптировал" сейчас внешнюю печатную форму УПД к старенькой-переддоделанной ТиС."
Имеем 2 неизвестных - переписанную базу и переделанную ВПФ. Что тут можно посоветовать? Это даже не телепат - телепаь в квадрате ;-) |
|||
24
mexanik_96
02.12.17
✎
10:10
|
(0) дефайн 0 0.00001
|
|||
25
Z1
02.12.17
✎
10:18
|
(0) Типы надо приводить к одному виду
Если 99% интерпритатор это за Вас делает правильно это не значит что в оставшемся 1% результат тоже будет правильным. Это касается любых языков программирования а не только 1с Т.е в 2 надо написать Если (ОстКолво > 0.0) Еще возможная причина если у Вас на форме определен ОстКолво как 15.2 то при занесении в ОстКолво числа 0.000001 в ОстКолво занесется 0.0 |
|||
26
Otark
02.12.17
✎
10:38
|
(25)>>Т.е в 2 надо написать Если (ОстКолво > 0.0)
можно рекомендацию от 1с где это написано. Я просто не разу не видел в типовых такого сравнения. Я вообще первый раз слышу что в 1с число может быть целым или дробным как в других ЯП. И значит у меня должна быть возможность привести переменную к этому типу? |
|||
27
nordbox
02.12.17
✎
10:47
|
в других языках есть Integer и Real
в 1с есть просто Число но у него есть формат числа. |
|||
28
Z1
02.12.17
✎
10:49
|
(26) Причем тут 1с в машинных кодах процессора число или целое или вещественное и это число имеет определенную длину (разрядность )
тоже само скажи Если ( 10/3) * 3 = 10.0 Тогда Сообщить("Равно"); Иначе Сообщить("Не равно"); КонецЕсли; Какой будет результ. В общем случае результат неопределен непредсказуем и завист от конкретной РЕАЛИЗАЦИИ языка на машинные коды |
|||
29
Dump
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) |
|||
30
73с
02.12.17
✎
14:54
|
0+ОстКолво
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |