一些机构帮助我解决以下问题
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 *. 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;
}
并正确运行它会给出预期的答案。
我认为你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 字符串。