Преобразовать CString в float в mfc

#c #visual-c #mfc

#c #visual-c #mfc

Вопрос:

как я могу преобразовать переменную CString в значение с плавающей запятой? (Я использую visuall c 6.0 и MFC)

Я пытаюсь использовать поле редактирования, чтобы вернуть значение, которое я помещаю в массив с плавающей запятой. Я использую метод GetWindowText для получения значения, которое возвращает CString. Итак, мне нужно преобразовать в значение с плавающей запятой. (или я просто делаю что-то совершенно неправильно?).

Я предполагаю, что для этого уже есть методы в MFC. (я уже использовал метод Format для преобразования в CString отображения значений в массиве в поле редактирования)

Спасибо.

Ответ №1:

вы можете просто сделать

     CString pi = "3.14";
    return atof(pi);
  

Редактировать

Также используйте эту функцию:

     CString pi = "3.14";
    return _ttof(pi);
  

Чтение строкового значения и анализ / преобразование его в float позволяет вам найти ошибку, когда она есть. Все, что вам нужно, это помощь функции времени выполнения C: strtod() или atof().

Я бы предпочел strtod, поскольку второй аргумент возвращает указатель на строку, на которой завершился синтаксический анализ:

  CString str;
m_edtMyEditBox.GetWindowText(str);
char *pEnd;
double dValue = strtod(str.GetBuffer(str.GetLength()), amp;pEnd);
if (*pEnd != '')
{
    // Error in parsing
}
str.ReleaseBuffer();
  

Комментарии:

1. Я думаю, так и должно быть CString pi = _T("3.14"); , если он собирается использовать _ttof()

2. @MikMik: если приложение поддерживает символы Юникода, то вам следует использовать макрос _T(), иначе этот макрос не нужен.

3. Во-первых, это 2011 год. Приложения должны поддерживать Unicode. И, во-вторых, если приложение поддерживает Unicode, вы должны использовать L «String» и _wtof. Если это не так, «String» и atof. _T(«Строка») и _ttof являются универсальными версиями, которые сопоставляются с правильной версией в соответствии с настройками проекта. Но смешивание «String» и _ttof — это смешивание литерала ANSI с универсальной функцией, которая случайно работает в сборке, отличной от unicode, но является неправильной.