Что нового

[Теория] Условные Операторы - Механизм сравнения данных разного типа

A

Alofa

Гость
Код:
$Number = 123 ; Тип данных - Число
$String = "123т,екст" ; Тип данных - Строка

If $Number = $String Then ; Почему получается - Истинно?
	MsgBox(0, 'If', "Равенство Истинно!")
Else
	MsgBox(0, 'If', "Равенство Ложь!")
EndIf


; Или так
Switch $Number 
    Case $String
        MsgBox(0, 'Switch', "Истинно!")
	Case Else
		MsgBox(0, 'Switch', "Ложь!")
EndSwitch
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Читаем внимательно справку.

Care is needed if comparing mixed datatypes, as unless the == case-sensitive string operator is used, mixed comparisons are usually made numerically. Most strings will be evaluated as 0 and so the result may well not be the one expected. It is recommended to force the items being compared into the same datatype using Number/String before the comparison.

Таким образом для смешанных типов сравнение будет производиться как целочисленное, т.е. строки преобразуются в число (если возможно). Далее читаем описание к функции Number().

A string beginning with letters has a numeric value of zero. A string beginning with digits has non-numeric characters stripped at the from the first one.

Другими словами ваша строка "123т,екст" будет преобразована в число 123. Что и требовалось доказать.
 
Автор
A

Alofa

Гость
Yashied Спасибо!
Вы подтвердили мои догадки. Меня смутила вот эта срока из справки:
Если строка используется как число, происходит скрытый вызов функции Number. Поэтому, если строка не является допустимым числом, вместо неё будет подставлен 0.
А после просмотра Number, все-таки решил уточниться.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Лучше используйте английскую справку, в русской слишком много креатива, да и устарела она уже.
 
Верх