Да, это ожидаемое поведение, как вы используете атрибут: Operator здесь, так что, во-первых значения, вводимые в TextBox будут опробованы преобразования неявно в Type
вы определили. т.е. Double
. Итак, я думаю, 5.
успешно преобразуется в двойное значение.
MSDN говорит это о OPERATOR свойство CompareValidator:
A data type comparison of the value entered in the input control being validated and
the data type specified by the BaseCompareValidator.Type property. Validation fails
if the value cannot be converted to the specified data
Целое всегда implicitly convertible к любому из: long
, float
, double
или decimal
. Это связано с тем, что это преобразование из более мелких типов данных и отсутствие потери данных. См. Это MSDN link.
Кроме того, когда вы объявляете:
Double d = 5;
ИЛИ
Double d = Convert.ToDouble("5.");
Проверьте значение d
отладчика. Он отображается как: 5.0
. Итак, теперь вы можете предположить, что использование 5 фактически интерпретируется как 5.0 и, таким образом, проходит проверка.
Да, но должно ли это разрешить 5. Я имею в виду пять плюс точка? Разве это не должно рассматриваться как неправильное или неполное число? –
Нет. Это не так. Так как ваш ТИП, установленный в CompareValidator, равен: Double, поэтому 5 действительно считается двойным, поскольку он неявно преобразуется в 5.0. Это 5.0 также является правильным двойным значением. –
Вы правы. Я пробовал в MS VBA 'CSng (" 5. ")'. Он преобразуется в действительное число. Спасибо и хорошо! –