有些人帮我解决了以下问题
strFixFactorSide = _T("0.5");
dFixFactorSide = atof((const char *)(LPCTSTR)strFixFactorSide);
“dFixFactorSide”取值为0.0000;
我将如何获得正确的价值?
答案 0 :(得分:1)
使用_tstof()
代替atof()
,并将CString转换为LPCTSTR,并保留原样,而不是尝试将其转到const char *
。在使用unicode并仅使用const char *
(LPCTSTR)时忘记const _TCHAR *
(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;
}
并正确运行会给出预期的答案。
答案 1 :(得分: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字符串。