|
Почему так (деление нацело)? 🠗 (Волшебник 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 И Ложь) - смущает. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |