CString
をC++のdouble
に変換するにはどうすればよいですか?C++でCStringをdoubleに変換するにはどうすればよいですか?
ユニコードのサポートもいいでしょう。
ありがとうございます!
CString
をC++のdouble
に変換するにはどうすればよいですか?C++でCStringをdoubleに変換するにはどうすればよいですか?
ユニコードのサポートもいいでしょう。
ありがとうございます!
CString
基本的LPCTSTR
、const char*
(Unicodeでconst wchar_t*
ビルド)に変換することができる(<stdlib.h>
又は<wchar.h>
が必要)。これを知っ
、あなたは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()
やライブラリのlexical_castブースト
このリンクは、私がユニコードをサポートするために使った "wcstod"を示しています。 http://msdn.microsoft.com/en-us/library/kxsfc1ab(VS.80).aspx –
これは動作しますが、IMO MighMoSのstd :: stringstreamの提案は少し面白いです。 – Pete
_wcstod_l/_tcstod_lでは、ロケールを指定できるため、ローカライズされたフォーマット(コンマまたはドットなどの小数点の区切り文字)を扱うことができます。 –
_UNICODE
が定義されているかどうかに基づいて_wtof()
)、あなたは
#include <boost/lexical_cast.hpp>
using namespace boost;
...
double d = lexical_cast<double>(thestring);
あなたはstd::stringstream
を使用して何もに何かを変換することができません。唯一の要件は、演算子>>
と<<
が実装されていることです。 Stringstreamsは<sstream>
ヘッダーファイルにあります。
std::stringstream converter;
converter << myString;
converter >> myDouble;
これは私にはうってつけです。残念ながら、Microsoft(MFC)のCString型では疑問のあるシナリオではうまくいきませんでした。私はこれをコンパイルしましたが、変換された倍数はランダムであるようですが、少なくともそれは文字列とは関係ありませんでした。私は、それがより良い演算子を実現する他のタイプのためにうまく動作することを望みます。私はまだC + +で標準文字列を使用するには専門家ですが、私にはエラーや例外をスローせずに間違った数値をもたらすコンバータは非常に危険です。 – Philm
備考:ここのもうひとつの提案である_tstof()は、CStringをdouble型に変換してくれました。 – Philm
@Philm:この答え**は、MFCの 'CString'オブジェクトでもうまく使えます。 'operator <<()'は必要ありません。これがコンストラクタの目的です: 'std :: wstringstream converter(myString);'これには 'CStringW'が必要であることに注意してください(大抵の場合、正しい型です)。しかし、そこにはまだサイレントキラーがあります。それは明らかに、エレガントなようです。そして間違っている。現在のスレッドのロケールを変換に使用します。これはあなたが望むものかもしれません。変換に使用するロケールを明示的に指定できるソリューションを使用する方がよいでしょう。 – IInspectable
私は本当にこれがまだ尋ねられていないと信じていません...しかし、検索は何も明らかにされていません。それが重複している場合は、穏やかにしてください:) –
ここでも答えは見つかりませんでしたが、 "cstring to double"というグーグルでは、最初のヒットで正しい答えが得られます。 –
@AndrewBainbridge実際には、「正解」によってここにこのページが表示されている場合: – aquirdturtle