Имя: Пароль:
1C
 
Почему так (деление нацело)?
🠗 (Волшебник 25.05.2015 14:25)
,
0 pro3ri
 
25.05.15
14:22
День добрый!
В толстом клиенте пишу в Табло:
10%3 = истина рез: Да
11%3 = Истина рез: Нет
это глюк платформы?
1 fisher
 
25.05.15
14:23
Потому что это не деление нацело
2 ale-sarin
 
25.05.15
14:24
истина = 1
3 pro3ri
 
25.05.15
14:24
(0) иначе 1 = истина Да
2= истина нет
4 ДенисЧ
 
25.05.15
14:25
(0) Это глюк в ДНК
5 pro3ri
 
25.05.15
14:25
при этом 4 И Истина РЕз Да
6 Гёдза
 
25.05.15
14:25
Истина приводится к число, а это 1
7 Seducer
 
25.05.15
14:26
% - остаток от деления
10%3 = 1
11%3 = 2

Истина = 1
Все остальное = Ложь
8 fisher
 
25.05.15
14:26
Хотя да, вроде раньше всё что не ноль, то истина было при неявном преобразовании к булево. А тут, выходит, только единица за истину. Ну и фиг с ним.
Всё равно юзать недокументированную фигню - моветон.
9 dmpl
 
25.05.15
14:27
(0) Конечно глюк. 1 имеет тип число, ИСТИНА - тип булево. Как они могут быть равны, имея разные типы?
10 fisher
 
25.05.15
14:38
Хотя стоп. Документировано. По документации явное преобразование числа к булево - возвращает ложь только для нуля. Получается, разное поведение для явного и неявного преобразования.
Вывод - стопудово косяк разработчиков.
11 Timon1405
 
25.05.15
14:40
(10), точно, попробовал такой код
    Если 10%3 Тогда
        Сообщить("10 Да");
    Иначе
        Сообщить("10 нет");
    КонецЕсли;
    Сообщить(10%3=Истина);
    
    Если 11%3 Тогда
        Сообщить("11 Да");
    Иначе
        Сообщить("11 нет");
    КонецЕсли;
    Сообщить(11%3=Истина);
//в случае 11 видно что в первое условие заходит
12 pro3ri
 
25.05.15
14:41
ВР опустил
13 fisher
 
25.05.15
14:43
Булево(11%3) = истина

Возвращает - да :)

ЗЫ. Странно, почему ветку утопили.
14 SUA
 
25.05.15
14:46
bool(11%3)=true
int(true)=1!=2
как-то так... косяка нет
15 fisher
 
25.05.15
14:49
(14) При явном преобразовании - косяка нет. Косяк проявляется при неявном преобразовании, но не всегда.

Тот же ?(11%3,Истина,Ложь) отрабатывает правильно.
А вот ?(11%3=Истина,Истина,Ложь) - неправильно.
16 Одинесю
 
25.05.15
14:50
(13) Просто в табло поставь 1=истина, 2 = истина, 3 и тд, только при 1 Да получаем.
17 fisher
 
25.05.15
14:51
(16) Да нифига. Смотри (15).
И в доке написано, что всё кроме нуля - истина.
18 Timon1405
 
25.05.15
14:52
(16) попробуйте выполнить код из (10) и скажите почему тогда для 11 вылазит "11 Да", т.е. заходит в первую ветку если
19 Одинесю
 
25.05.15
14:54
(17) Я это знаю, ты посмотри в табло )
20 fisher
 
25.05.15
14:55
(19) Это ты забей в табло оба примера из 15.
21 Одинесю
 
25.05.15
14:57
(20) Да забил я, получается при явном сравнении на истину работает только при 1
22 fisher
 
25.05.15
14:59
Можно еще проще -
?(2,Истина,Ложь)
?(2=Истина,Истина,Ложь)
(21) Тогда я тебя не понял. В (10) я сделал вывод. Ты возражаешь или соглашаешься?
23 Одинесю
 
25.05.15
15:02
(22) Конечно соглашаюсь, я просто написал, как проще, без % посмотреть.
24 fisher
 
25.05.15
15:06
(23) Тупанул. Дошло :)
25 dmpl
 
26.05.15
07:16
(10) При операциях сравнения вообще не должно быть преобразования типов. Ибо если типы разные - уже не равно. Но 1Сникам лень было проверять сначала тип, потом бинарно сравнивать, поэтому они сразу сравнивают бинарно. Ну а поскольку внутри у них Истина - это число 1, то 1 = 1, а все остальное не равно (т.е. операция сравнения дает ложь).
26 fisher
 
26.05.15
09:40
(25) Ты когда-нибудь про неявное преобразование типов в динамических языках слышал? Там где не должно быть - там ругаться будет.
А неявное преобразование чисел в булево и чисел в строку - много где работает. И почему-то ("Вася " + 1) тебя не смущает,  а (2 И Ложь) - смущает.