Как преобразовать CString
в double
в C++?Как преобразовать CString в double в C++?
Поддержка Юникода также будет приятной.
Спасибо!
Как преобразовать CString
в double
в C++?Как преобразовать CString в double в C++?
Поддержка Юникода также будет приятной.
Спасибо!
CString
может преобразовать в LPCTSTR
, которая в основном const char*
(const wchar_t*
в Unicode версии).
Зная это, вы можете использовать atof()
:
CString thestring("13.37");
double d = atof(thestring).
... или для сборки Unicode, _wtof()
:
CString thestring(L"13.37");
double d = _wtof(thestring).
... или поддерживать как Unicode и не-Unicode строит. ..
CString thestring(_T("13.37"));
double d = _tstof(thestring).
(_tstof()
- это макрос, который расширяется до atof()
или _wtof()
в зависимости от того или не определен _UNICODE
)
Эта ссылка показывает вам «wcstod», что я использовал для поддержки unicode. http://msdn.microsoft.com/en-us/library/kxsfc1ab(VS.80).aspx –
Это работает, но предложение IMO MighMoS о std :: stringstream немного чище. – Pete
_wcstod_l/_tcstod_l позволяет указать локаль, поэтому можно обрабатывать локализованный формат (десятичный разделитель как запятая или точка и т. Д.) –
с повышением lexical_cast библиотеки, вы
#include <boost/lexical_cast.hpp>
using namespace boost;
...
double d = lexical_cast<double>(thestring);
Вы можете конвертировать ничего ни к чему используя std::stringstream
. Единственное требование - реализовать операторы >>
и <<
. Строковые потоки можно найти в файле заголовка <sstream>
.
std::stringstream converter;
converter << myString;
converter >> myDouble;
Это звучало хорошо для меня. К сожалению, это не сработало для сомнительного сценария здесь с типом CString Microsoft (MFC). Я получил это скомпилированное, но преобразованное двойное число показалось случайным, по крайней мере, оно не имело никакого отношения к строке. Надеюсь, он отлично подходит для других типов, которые лучше реализуют операторы << and >. Я еще не эксперт в использовании std строк в C++, но для меня очень опасен конвертер, который приводит к неправильным номерам без выброса ошибки или исключения. – Philm
Примечание: Другое предложение здесь, _tstof() отлично работало для преобразования CString в double для меня. – Philm
@Philm: Этот ответ ** может использоваться ** с объектами MFC 'CString' просто отлично. Вам также не нужен 'operator <<()'. Это то, что конструктор для: 'std :: wstringstream converter (myString);'. Обратите внимание, что для этого требуется 'CStringW' (который в большинстве случаев является правильным типом). Тем не менее, там все еще тихий убийца. Это кажется ясным, изящным. И неправильно. Он использует текущую локализацию потока для преобразования. Это может быть или не быть тем, что вы хотите. Лучше использовать решение, которое позволяет явно указать язык, который будет использоваться для преобразования. – IInspectable
Я действительно не могу поверить, что этого еще не задавали ... но поиск ничего не показал. Если это дубликат, пожалуйста, будьте осторожны :) –
Не удалось найти ответ здесь, но googling «cstring to double» дает вам правильный ответ при первом попадании. –
@AndrewBainbridge действительно это делает, если «правильным ответом» вы имеете в виду эту страницу прямо здесь :) – aquirdturtle