将 CString 转换为浮点数
Posted
技术标签:
【中文标题】将 CString 转换为浮点数【英文标题】:Conversion of CString to float 【发布时间】:2012-05-12 12:09:38 【问题描述】:有人帮我解决以下问题
strFixFactorSide = _T("0.5");
dFixFactorSide = atof((const char *)(LPCTSTR)strFixFactorSide);
"dFixFactorSide" 取值为 0.0000;
我将如何获得正确的价值?
【问题讨论】:
【参考方案1】:使用_tstof()
代替atof()
,并将CString 转换为LPCTSTR,并保持原样,而不是尝试将其转换为const char *
。在使用 unicode 时忘记 const char *
(LPCSTR),只使用 const _TCHAR *
(LPCTSTR)。
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;
正确运行它会给出预期的答案。
【讨论】:
【参考方案2】:我认为您的 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 字符串。
【讨论】:
我收到错误为“错误 C2065:'_wtof':未声明的标识符”。我使用 eVC++ 4.0 您是否尝试包含<stdio.h>
、<wchar.h>
、<stdlib.h>
、<math.h>
?其他尝试:wcstod()
或 swscanf()
。
我得到了如下解决方案 "_stscanf(strFixFactorSide, _T("%lf"), &dFixFactorSide);"但这是正确的方法吗?
我会写_stscanf((LPCTSTR)strFixFactorSide, _T("%lf"), &dFixFactorSide);
。以上是关于将 CString 转换为浮点数的主要内容,如果未能解决你的问题,请参考以下文章
sklearn-LinearRegression:无法将字符串转换为浮点数:'--'
ValueError:无法将字符串转换为浮点数:'GIAC'