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