-1

次の問題に関して誰かが私を助けてくれます

strFixFactorSide = _T("0.5"); 
dFixFactorSide = atof((const char *)(LPCTSTR)strFixFactorSide);

「dFixFactorSide」の値は 0.0000 です。

どうすれば正しい値を取得できますか?

4

2 に答える 2

1

_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;
}

これを正しく実行すると、期待される答えが得られます。

于 2012-05-14T17:59:08.393 に答える
0

あなた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 文字列に使用できます。

于 2012-05-12T12:35:07.553 に答える