将 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'

将字节转换为浮点数?

在 Swift 中将半精度浮点数(字节)转换为浮点数

我收到 ValueError:无法将字符串转换为浮点数:'8,900' [重复]

ValueError:无法将字符串转换为浮点数:'Bad'