次の問題に関して誰かが私を助けてくれます
strFixFactorSide = _T("0.5");
dFixFactorSide = atof((const char *)(LPCTSTR)strFixFactorSide);
「dFixFactorSide」の値は 0.0000 です。
どうすれば正しい値を取得できますか?
次の問題に関して誰かが私を助けてくれます
strFixFactorSide = _T("0.5");
dFixFactorSide = atof((const char *)(LPCTSTR)strFixFactorSide);
「dFixFactorSide」の値は 0.0000 です。
どうすれば正しい値を取得できますか?
_tstof()
の代わりに使用しatof()
、 CString を LPCTSTR にキャストし、 に取得しようとする代わりにそのままにしておきconst char *
ます。Unicode を扱っている間は (LPCSTR) のことは忘れて、(LPCTSTR)const char *
のみを使用してください。const _TCHAR *
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
CString s1 = _T("123.4");
CString s2 = _T("567.8");
double v1 = _tstof((LPCTSTR)s1);
double v2 = _tstof((LPCTSTR)s2);
_tprintf(_T("%.3f"), v1 + v2);
return nRetCode;
}
これを正しく実行すると、期待される答えが得られます。
あなたCString strFixFactorSide
は Unicode (UTF-16) 文字列だと思います。
そうである場合、キャスト(const char *)
はポインターの型のみを変更しますが、それが指す文字列は依然として Unicode のままです。
atof()
Unicode 文字列では機能しません。押し込むと、バイト0x30 L"0.5"
('0') と 0x00 (これも UTF-16 '0' の一部) がフェッチされ、NUL で終わる ASCII 文字列として扱われ、"0"
0.0 に変換されます。
が Unicode 文字列の場合CString strFixFactorSide
は、まずそれを ASCII 文字列に変換してから適用するatof()
か、Unicode 文字列を数値に変換できる関数を使用する必要があります。_wtof()
Unicode 文字列に使用できます。