Как проверить, является ли запись номером, включая числа с плавающей запятой

Есть ли простой способ или функция, чтобы проверить, является ли запись в поле ввода числовой, включая числа с плавающей запятой. Любые буквенные или буквенно-цифровые записи не допускаются. Без части числа с плавающей точкой я бы проверил ascii, но я думаю, что она не работает для чисел с плавающей точкой.

Спасибо

0

Решение

Если это диалог, вы можете добавить элемент управления редактирования в диалог. После запуска мастера диалога добавьте переменную в этот элемент управления. Выберите тип float. Подпрограмма DDX_Text сделает все остальное.

Но это позволит вводить буквенные символы. Если вы хотите исправить это тоже. Вы можете создать подкласс управления редактирования с помощью специального обработчика OnChar (WM_CHAR), который допускает только десятичные числа и десятичную точку.

1

Другие решения

Так как ваш вопрос помечен как mfcВот фрагмент кода с использованием CString:

CString ss;
float ff;
GetDlgItemText(IDC_MY_EDIT_BOX, ss);
if (_stscanf_s(ss, _T("%f"), &ff) == 1)
// ff contains the value
else
// error

Если вам нужно использовать число с двойной точностью, используйте "%lf" в вызове scanf.

РЕДАКТИРОВАТЬ:

CString ss;
float ff;
GetDlgItemText(IDC_MY_EDIT_BOX, ss);
LPCTSTR lpszString = ss;
TCHAR *endptr;
ff = (float) _tcstod(lpszString, &endptr);
if (endptr != lpszString && *endptr == '\0')
// ff contains the value
else
// error
2

По вопросам рекламы [email protected]