Что нового

Данные, строки Перевод строки в число. Number(). Ноль не считается числом?

Пост номер 6 был отмечен как лучший ответ.

aptyp

Новичок
Сообщения
9
Репутация
0
Хочу, чтобы при вводе текста, строка конвертировалась в число 0.

Почему при вводе нуля, он не считается числом?

Код:
$variable = InputBox("", "Введите количество.")
If @error = 1 Then Exit
;
$variable = Number($variable)
;
Switch $variable
Case $variable >= 0
MsgBox(0, "", "Вы получили +" & $variable & " опыта")
Case Else
MsgBox(0, "", "Что то пошло не так.")
EndSwitch
;
 

xXx

Меценат
Меценат
Сообщения
184
Репутация
61
Почему при вводе нуля, он не считается числом?
Считается.
Код:
$variable = InputBox("", "Введите количество.")
If @error = 1 Then Exit
;
$variable = Number($variable)
;
Select
    Case $variable >= 0
        MsgBox(0, "", "Вы получили +" & $variable & " опыта")
    Case Else
        MsgBox(0, "", "Что то пошло не так.")
EndSelect
А также за ноль в вашем случае и любой текст, начинающийся не с цифры, сойдет.
 
Автор
A

aptyp

Новичок
Сообщения
9
Репутация
0
Очень интересно получается.

Вместо 1 вопроса, теперь 3 вопроса.

Вопрос 1, почему в моём случае, при использовании Switch ... EndSwitch нельзя ввести 0?

Вопрос 2, почему в моём случае, при использовании Select ... EndSelect пустая строка тоже конвертируется в 0?

Вопрос 3, в какой момент тут вся логика меняется?

Разница, мало сказать, что неочевидная.
Тут без углубленного мануала в эти функции не обойтись.
И это ещё простейший код.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 473
Репутация
2 403
почему в моём случае, при использовании Switch ... EndSwitch нельзя ввести 0?
Почему нельзя? Просто неверное использование.

пустая строка тоже конвертируется в 0
Потому что Number так делает (всё что не число становится 0).

В твоём случае нужно проверять наверное так:
Код:
$Variable = InputBox("", "Введите количество.")

;Нажата кнопка отмены
If @error = 1 Then Exit

;Проверяем введённое число
Select
    ;Указанно НЕ число
    Case Not StringIsInt($Variable)
        MsgBox(0, "", "Что то пошло не так.")
    ;Указанно 0
    Case $Variable = '0'
        MsgBox(0, "", "Вы получили 0 опыта")
    ;Указанно число больше чем 0
    Case Else
        MsgBox(0, "", "Вы получили +" & $Variable & " опыта")
EndSelect
 
Автор
A

aptyp

Новичок
Сообщения
9
Репутация
0
Почему нельзя? Просто неверное использование.
Хорошо, попробую так.

А как понять в данном случае, что я неправильно использую Switch ... EndSwitch?
Код же вроде прост, как лопата.
Об которую я ломаю голову и просто не пойму, в чём проблема.

Конкретнее, я не понимаю, почему эти 2 конструкции отличаются.
Логика ведь в них одинаковая.

Пока я пришёл к выводу, что здесь какая то проблема в операторе (>=)

Код:
$variable = InputBox("", "Введите количество.")

; Если нажата кнопка CANCEL
If @error = 1 Then Exit

; Перевод строки в число. Текст заменяется числом 0.
$variable = Number($variable)

Switch $variable
;  !!! Тут вот проблема с оператором (>=). При вводе нуля, происходит прыжок на второй кейс.
    Case $variable >= 0
        MsgBox(0, "", "Вы получили +" & $variable & " опыта")
    Case Else
        MsgBox(0, "", "Что то пошло не так.")
EndSwitch

A тут всё работает.
Код:
$variable = InputBox("", "Введите количество.")

; Если нажата кнопка CANCEL
If @error = 1 Then Exit

; Перевод строки в число. Текст заменяется числом 0.
$variable = Number($variable)

Switch $variable
    Case $variable = 0 And $variable > 0
        MsgBox(0, "", "Вы получили +" & $variable & " опыта")
    Case Else
        MsgBox(0, "", "Что то пошло не так.")
EndSwitch
 
Последнее редактирование:

xXx

Меценат
Меценат
Сообщения
184
Репутация
61
не пойму, в чём проблема.
Еще раз внимательно прочитайте описание по Switch...Case...EndSwitch, особенно это:
<expression>Значение или выражение, возвращающее значение. Далее это значение сравнивается со значением(ями) или диапазоном значений в каждом Case до тех пор, пока не будет найдено совпадение. Это выражение вычисляется только один раз.
 
Автор
A

aptyp

Новичок
Сообщения
9
Репутация
0
Еще раз внимательно прочитайте описание по Switch...Case...EndSwitch, особенно это:
Такое описание сразу так и не поймёшь.

Получается что, условие >= 0 в моём случае работает просто как > 0, а проверка на = 0 как бы не срабатывает,
из за чего работает только вариант, когда условия = 0 и > 0 разделены?

Если так, то в этом случае всё вроде логично.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 473
Репутация
2 403
ак понять в данном случае, что я неправильно использую Switch ... EndSwitch?
Тут
Код:
Switch $variable
    Case $variable >= 0

проверяет условие, не ровняется ли $variable значению в Case, а это $variable >= 0, т.е если оно больше или ровно 0, то будет True, иначе False, с одним из этих значений будет сравниваться сама $variable.
 
Верх