Я ввожу некоторое значение в CSpinEdit. По идее должно быть положительное целое число в интервале между какими-то мин. и макс. Необходимо проверить, является ли введенное в CSpitEdit целым числом. Подскажите, пожалуйста, как.
Здравствуйте, Drugaya, Вы писали:
D>Я ввожу некоторое значение в CSpinEdit. По идее должно быть положительное целое число в интервале между какими-то мин. и макс. Необходимо проверить, является ли введенное в CSpitEdit целым числом. Подскажите, пожалуйста, как.
Вариант 1.
Преобразуйте текст в два числа: целое и вещественное. Если оба числа равны, значит введено целое число.
Вариант 2.
Преобразуйте текст в вещественное число. Затем, если frac() от этого числа вернет 0, то число целое.
Здравствуйте, Drugaya, Вы писали:
D>Я ввожу некоторое значение в CSpinEdit. По идее должно быть положительное целое число в интервале между какими-то мин. и макс. Необходимо проверить, является ли введенное в CSpitEdit целым числом. Подскажите, пожалуйста, как.
Например, в OnChange проверять SpinEdit.Text StrToIntDef-ом
Там же может быть не число введено.
lgb>Здравствуйте, Drugaya, Вы писали:
D>>Я ввожу некоторое значение в CSpinEdit. По идее должно быть положительное целое число в интервале между какими-то мин. и макс. Необходимо проверить, является ли введенное в CSpitEdit целым числом. Подскажите, пожалуйста, как.
lgb>Вариант 1. lgb>Преобразуйте текст в два числа: целое и вещественное. Если оба числа равны, значит введено целое число.
lgb>Вариант 2. lgb>Преобразуйте текст в вещественное число. Затем, если frac() от этого числа вернет 0, то число целое.
Там нет Text, а есть Value. Оно должно быть числом уже при вводе, а не при дальнейшей обработке.
RC>Здравствуйте, Drugaya, Вы писали:
D>>Я ввожу некоторое значение в CSpinEdit. По идее должно быть положительное целое число в интервале между какими-то мин. и макс. Необходимо проверить, является ли введенное в CSpitEdit целым числом. Подскажите, пожалуйста, как. RC>Например, в OnChange проверять SpinEdit.Text StrToIntDef-ом
Re[2]: Глупый вопрос: проверка типа.
От:
Аноним
Дата:
16.05.07 12:30
Оценка:
Здравствуйте, lgb, Вы писали:
lgb>Вариант 2. lgb>Преобразуйте текст в вещественное число. Затем, если frac() от этого числа вернет 0, то число целое.
Только сравнивать надо не с нулем, а с эпсилон типа 1E-6 (на всякий случай)
Здравствуйте, Red Cap, Вы писали:
RC>Здравствуйте, Drugaya, Вы писали:
D>>Я ввожу некоторое значение в CSpinEdit. По идее должно быть положительное целое число в интервале между какими-то мин. и макс. Необходимо проверить, является ли введенное в CSpitEdit целым числом. Подскажите, пожалуйста, как. RC>Например, в OnChange проверять SpinEdit.Text StrToIntDef-ом
А какое же default-значение будет обозначать неудачное преобразование?
Здравствуйте, lgb, Вы писали:
lgb>А какое же default-значение будет обозначать неудачное преобразование?
-1? Или просто минимальное возможное значение или максимальное (зависит от того, что выгоднее в контексте задачи).
Здравствуйте, lgb, Вы писали:
lgb>Если будет введено -1 (вполне себе целое число), то получается, что это будет воспринято как ошибка.
Не будет. По условию из первого поста числа должны быть положительными. Вообще за признак ошибки можно взять любое число из чисел, не лежащих в диапазоне от минимально возможного, до максимально возможного.
Здравствуйте, Drugaya, Вы писали:
D>Здравствуйте, Red Cap, Вы писали:
D>Там нет Text, а есть Value. Оно должно быть числом уже при вводе, а не при дальнейшей обработке.
Здравствуйте, SeLarin, Вы писали:
SL>Здравствуйте, lgb, Вы писали:
lgb>>Если будет введено -1 (вполне себе целое число), то получается, что это будет воспринято как ошибка. SL>Не будет. По условию из первого поста числа должны быть положительными. Вообще за признак ошибки можно взять любое число из чисел, не лежащих в диапазоне от минимально возможного, до максимально возможного.
Ладно. Если дефолтное значение угадать не удаётся, то предлагаю использовать StrToInt и ловить исключение
Здравствуйте, SeLarin, Вы писали:
SL>Здравствуйте, lgb, Вы писали:
lgb>>Если будет введено -1 (вполне себе целое число), то получается, что это будет воспринято как ошибка. SL>Не будет. По условию из первого поста числа должны быть положительными. Вообще за признак ошибки можно взять любое число из чисел, не лежащих в диапазоне от минимально возможного, до максимально возможного.
В условии написано: "по идее...". То есть, такое решение конечно же подойдет, но если вдруг условие изменится (возникнет другая идея ), то придется переделывать.
Здравствуйте, lgb, Вы писали:
lgb>В условии написано: "по идее...". То есть, такое решение конечно же подойдет, но если вдруг условие изменится (возникнет другая идея ), то придется переделывать.
По идее такого рода компонент должен иметь свойство непосредственно представляющее величину в виде числа, а проверки на ввод должны осуществляться внутри самого компонента и должно быть просто невозможно ввести «неправильное» значение. Если он ведёт себя иначе, то это наводит на мысле об ошибках в проектировании.
Здравствуйте, SeLarin, Вы писали:
SL>Здравствуйте, lgb, Вы писали:
lgb>>В условии написано: "по идее...". То есть, такое решение конечно же подойдет, но если вдруг условие изменится (возникнет другая идея ), то придется переделывать. SL>По идее такого рода компонент должен иметь свойство непосредственно представляющее величину в виде числа, а проверки на ввод должны осуществляться внутри самого компонента и должно быть просто невозможно ввести «неправильное» значение. Если он ведёт себя иначе, то это наводит на мысле об ошибках в проектировании.
Там тогда exception валится, если что-то другое вводить
Здравствуйте, Аноним, Вы писали:
lgb>>Вариант 2. lgb>>Преобразуйте текст в вещественное число. Затем, если frac() от этого числа вернет 0, то число целое.
А>Только сравнивать надо не с нулем, а с эпсилон типа 1E-6 (на всякий случай)
Да, да, верно. Помнится в математике напоролся на этом. Упорно не мог добиться равенства двух значений потому что одно было всегда с .000 — сколько-то нулей и единица после точки.
Здравствуйте, Drugaya, Вы писали:
D>Я ввожу некоторое значение в CSpinEdit. По идее должно быть положительное целое число в интервале между какими-то мин. и макс. Необходимо проверить, является ли введенное в CSpitEdit целым числом. Подскажите, пожалуйста, как.
Здравствуйте, Red Cap, Вы писали:
RC>Там тогда exception валится, если что-то другое вводить
Интересно и почему бы его не обработать внутри компонента? Как его перехватывать и обрабатывать, если оно вызывается при вводе?
Здравствуйте, SeLarin, Вы писали:
SL>Здравствуйте, Red Cap, Вы писали:
RC>>Там тогда exception валится, если что-то другое вводить SL>Интересно и почему бы его не обработать внутри компонента? Как его перехватывать и обрабатывать, если оно вызывается при вводе?
Ну уж простите, не я автор