#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, но является неправильной.