-1

一些机构帮助我解决以下问题

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

"dFixFactorSide" 取值为 0.0000;

我将如何获得正确的价值?

4

2 回答 2

1

使用_tstof()代替atof(),并将 CString 转换为 LPCTSTR,并保持原样,而不是尝试将其转换为const char *. const char *在使用 unicode 并仅使用const _TCHAR *(LPCTSTR)时忘记(LPCSTR)。

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 字符串。如果你推L"0.5"入它,它将获取字节 0x30('0')和 0x00(也是 UTF-16 '0' 的一部分),将其视为以 NUL 结尾的 ASCII 字符串"0"并将其转换为 0.0。

如果CString strFixFactorSide是 Unicode 字符串,您需要先将其转换为 ASCII 字符串,然后应用atof()或使用能够将 Unicode 字符串转换为数字的函数。_wtof()可用于 Unicode 字符串。

于 2012-05-12T12:35:07.553 回答