C ++ atof / _wtof,舍入错误

时间:2017-02-09 13:38:27

标签: c++ mfc rounding c-strings atof

我有一个CString变量,我需要将其转换为double

CString sVal(_T("    4.2"));
double dbl2 = _wtof(sVal);

我得到dbl2 = 4.0000而不是4.2。四舍五入的原因是什么?

1 个答案:

答案 0 :(得分:1)

小数点是"项目之一"在本地化

警告!!!以下代码未针对许多后续转换进行优化

#include <locale.h> 
#include <string>

...

CString sVal(_T("    4.2"));

std::string currentLocale = setlocale(LC_NUMERIC, NULL); //retrive current locale
setlocale(LC_NUMERIC, "C"); //change numeric locale to C, now decimal separator is '.'

double dbl2 = _wtof(sVal);

setlocale(LC_NUMERIC, currentLocale.c_str()); //return to original locale

请参阅http://www.cplusplus.com/reference/clocale/setlocale/