Глупый вопрос: проверка типа.
От: Drugaya  
Дата: 16.05.07 11:12
Оценка:
Я ввожу некоторое значение в CSpinEdit. По идее должно быть положительное целое число в интервале между какими-то мин. и макс. Необходимо проверить, является ли введенное в CSpitEdit целым числом. Подскажите, пожалуйста, как.
Re: Глупый вопрос: проверка типа.
От: lgb Канада  
Дата: 16.05.07 11:31
Оценка:
Здравствуйте, Drugaya, Вы писали:

D>Я ввожу некоторое значение в CSpinEdit. По идее должно быть положительное целое число в интервале между какими-то мин. и макс. Необходимо проверить, является ли введенное в CSpitEdit целым числом. Подскажите, пожалуйста, как.


Вариант 1.
Преобразуйте текст в два числа: целое и вещественное. Если оба числа равны, значит введено целое число.

Вариант 2.
Преобразуйте текст в вещественное число. Затем, если frac() от этого числа вернет 0, то число целое.
Re: Глупый вопрос: проверка типа.
От: Red Cap Россия  
Дата: 16.05.07 11:33
Оценка:
Здравствуйте, Drugaya, Вы писали:

D>Я ввожу некоторое значение в CSpinEdit. По идее должно быть положительное целое число в интервале между какими-то мин. и макс. Необходимо проверить, является ли введенное в CSpitEdit целым числом. Подскажите, пожалуйста, как.

Например, в OnChange проверять SpinEdit.Text StrToIntDef-ом
Re[2]: Глупый вопрос: проверка типа.
От: Drugaya  
Дата: 16.05.07 11:36
Оценка:
Здравствуйте, lgb, Вы писали:

Там же может быть не число введено.

lgb>Здравствуйте, Drugaya, Вы писали:


D>>Я ввожу некоторое значение в CSpinEdit. По идее должно быть положительное целое число в интервале между какими-то мин. и макс. Необходимо проверить, является ли введенное в CSpitEdit целым числом. Подскажите, пожалуйста, как.


lgb>Вариант 1.

lgb>Преобразуйте текст в два числа: целое и вещественное. Если оба числа равны, значит введено целое число.

lgb>Вариант 2.

lgb>Преобразуйте текст в вещественное число. Затем, если frac() от этого числа вернет 0, то число целое.
Re[2]: Глупый вопрос: проверка типа.
От: Drugaya  
Дата: 16.05.07 11:37
Оценка:
Здравствуйте, Red Cap, Вы писали:

Там нет 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 (на всякий случай)
Re[3]: Глупый вопрос: проверка типа.
От: lgb Канада  
Дата: 16.05.07 13:15
Оценка:
Здравствуйте, Drugaya, Вы писали:

D>Здравствуйте, lgb, Вы писали:


D>Там же может быть не число введено.


Ну и что? Ловите исключение при конвертации. Если поймаете — значит, там точно не целое число.
Re[2]: Глупый вопрос: проверка типа.
От: lgb Канада  
Дата: 16.05.07 13:17
Оценка:
Здравствуйте, Red Cap, Вы писали:

RC>Здравствуйте, Drugaya, Вы писали:


D>>Я ввожу некоторое значение в CSpinEdit. По идее должно быть положительное целое число в интервале между какими-то мин. и макс. Необходимо проверить, является ли введенное в CSpitEdit целым числом. Подскажите, пожалуйста, как.

RC>Например, в OnChange проверять SpinEdit.Text StrToIntDef-ом

А какое же default-значение будет обозначать неудачное преобразование?
Re[3]: Глупый вопрос: проверка типа.
От: SeLarin Россия http://selarin.livejournal.com
Дата: 16.05.07 19:22
Оценка:
Здравствуйте, lgb, Вы писали:

lgb>А какое же default-значение будет обозначать неудачное преобразование?

-1? Или просто минимальное возможное значение или максимальное (зависит от того, что выгоднее в контексте задачи).
... << RSDN@Home 1.2.0 alpha rev. 677>>
Re[4]: Глупый вопрос: проверка типа.
От: lgb Канада  
Дата: 16.05.07 21:18
Оценка:
Здравствуйте, SeLarin, Вы писали:

SL>Здравствуйте, lgb, Вы писали:


lgb>>А какое же default-значение будет обозначать неудачное преобразование?

SL>-1?

Если будет введено -1 (вполне себе целое число), то получается, что это будет воспринято как ошибка.
Re[5]: Глупый вопрос: проверка типа.
От: SeLarin Россия http://selarin.livejournal.com
Дата: 17.05.07 06:13
Оценка:
Здравствуйте, lgb, Вы писали:

lgb>Если будет введено -1 (вполне себе целое число), то получается, что это будет воспринято как ошибка.

Не будет. По условию из первого поста числа должны быть положительными. Вообще за признак ошибки можно взять любое число из чисел, не лежащих в диапазоне от минимально возможного, до максимально возможного.
Re[3]: Глупый вопрос: проверка типа.
От: Red Cap Россия  
Дата: 17.05.07 07:08
Оценка:
Здравствуйте, Drugaya, Вы писали:

D>Здравствуйте, Red Cap, Вы писали:


D>Там нет Text, а есть Value. Оно должно быть числом уже при вводе, а не при дальнейшей обработке.


Там есть Text!
Re[6]: Глупый вопрос: проверка типа.
От: Red Cap Россия  
Дата: 17.05.07 07:13
Оценка:
Здравствуйте, SeLarin, Вы писали:

SL>Здравствуйте, lgb, Вы писали:


lgb>>Если будет введено -1 (вполне себе целое число), то получается, что это будет воспринято как ошибка.

SL>Не будет. По условию из первого поста числа должны быть положительными. Вообще за признак ошибки можно взять любое число из чисел, не лежащих в диапазоне от минимально возможного, до максимально возможного.

Ладно. Если дефолтное значение угадать не удаётся, то предлагаю использовать StrToInt и ловить исключение
Re[6]: Глупый вопрос: проверка типа.
От: lgb Канада  
Дата: 17.05.07 09:48
Оценка:
Здравствуйте, SeLarin, Вы писали:

SL>Здравствуйте, lgb, Вы писали:


lgb>>Если будет введено -1 (вполне себе целое число), то получается, что это будет воспринято как ошибка.

SL>Не будет. По условию из первого поста числа должны быть положительными. Вообще за признак ошибки можно взять любое число из чисел, не лежащих в диапазоне от минимально возможного, до максимально возможного.

В условии написано: "по идее...". То есть, такое решение конечно же подойдет, но если вдруг условие изменится (возникнет другая идея ), то придется переделывать.
Re[7]: Глупый вопрос: проверка типа.
От: SeLarin Россия http://selarin.livejournal.com
Дата: 17.05.07 10:25
Оценка:
Здравствуйте, lgb, Вы писали:

lgb>В условии написано: "по идее...". То есть, такое решение конечно же подойдет, но если вдруг условие изменится (возникнет другая идея ), то придется переделывать.

По идее такого рода компонент должен иметь свойство непосредственно представляющее величину в виде числа, а проверки на ввод должны осуществляться внутри самого компонента и должно быть просто невозможно ввести «неправильное» значение. Если он ведёт себя иначе, то это наводит на мысле об ошибках в проектировании.
Re[8]: Глупый вопрос: проверка типа.
От: Red Cap Россия  
Дата: 17.05.07 11:03
Оценка:
Здравствуйте, SeLarin, Вы писали:

SL>Здравствуйте, lgb, Вы писали:


lgb>>В условии написано: "по идее...". То есть, такое решение конечно же подойдет, но если вдруг условие изменится (возникнет другая идея ), то придется переделывать.

SL>По идее такого рода компонент должен иметь свойство непосредственно представляющее величину в виде числа, а проверки на ввод должны осуществляться внутри самого компонента и должно быть просто невозможно ввести «неправильное» значение. Если он ведёт себя иначе, то это наводит на мысле об ошибках в проектировании.
Там тогда exception валится, если что-то другое вводить
Re[3]: Глупый вопрос: проверка типа.
От: Daft  
Дата: 17.05.07 11:09
Оценка:
Здравствуйте, Аноним, Вы писали:

lgb>>Вариант 2.

lgb>>Преобразуйте текст в вещественное число. Затем, если frac() от этого числа вернет 0, то число целое.

А>Только сравнивать надо не с нулем, а с эпсилон типа 1E-6 (на всякий случай)


Да, да, верно. Помнится в математике напоролся на этом. Упорно не мог добиться равенства двух значений потому что одно было всегда с .000 — сколько-то нулей и единица после точки.
Re: Глупый вопрос: проверка типа.
От: Daft  
Дата: 17.05.07 11:12
Оценка:
Здравствуйте, Drugaya, Вы писали:

D>Я ввожу некоторое значение в CSpinEdit. По идее должно быть положительное целое число в интервале между какими-то мин. и макс. Необходимо проверить, является ли введенное в CSpitEdit целым числом. Подскажите, пожалуйста, как.


А чем установить MinValue и MaxValue плохо?
Re[9]: Глупый вопрос: проверка типа.
От: SeLarin Россия http://selarin.livejournal.com
Дата: 17.05.07 11:24
Оценка:
Здравствуйте, Red Cap, Вы писали:

RC>Там тогда exception валится, если что-то другое вводить

Интересно и почему бы его не обработать внутри компонента? Как его перехватывать и обрабатывать, если оно вызывается при вводе?
Re[10]: Глупый вопрос: проверка типа.
От: Red Cap Россия  
Дата: 17.05.07 12:29
Оценка:
Здравствуйте, SeLarin, Вы писали:

SL>Здравствуйте, Red Cap, Вы писали:


RC>>Там тогда exception валится, если что-то другое вводить

SL>Интересно и почему бы его не обработать внутри компонента? Как его перехватывать и обрабатывать, если оно вызывается при вводе?
Ну уж простите, не я автор
Re[11]: Глупый вопрос: проверка типа.
От: SeLarin Россия http://selarin.livejournal.com
Дата: 17.05.07 13:06
Оценка:
Здравствуйте, Red Cap, Вы писали:

RC>Ну уж простите, не я автор

Может тогда стоит сменить используемый компонент?
Re: Глупый вопрос: проверка типа.
От: -DeBUGGeR- Россия www.green-d.com
Дата: 17.05.07 16:32
Оценка:
Здравствуйте, Drugaya, Вы писали:

D>Я ввожу некоторое значение в CSpinEdit. По идее должно быть положительное целое число в интервале между какими-то мин. и макс. Необходимо проверить, является ли введенное в CSpitEdit целым числом. Подскажите, пожалуйста, как.



var 
  tmp: Integer;
  x: String;
begin
  // x - число в виде строки, которое нужно проверить
  if not TryStrToInt(x, tmp) then
  begin
    // Это число не целое !!!
  end;
end;
Господи, перезагрузи этот мир...
Re[2]: Глупый вопрос: проверка типа.
От: lgb Канада  
Дата: 18.05.07 06:33
Оценка:
Здравствуйте, -DeBUGGeR-, Вы писали:

DBU>
DBU>  if not TryStrToInt(x, tmp) then
DBU>


Во как! Век живи — век учись...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.