Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;atof/wtof,舍入误差_C++_Mfc_Rounding_C Strings_Atof - Fatal编程技术网

C++ C++;atof/wtof,舍入误差

C++ C++;atof/wtof,舍入误差,c++,mfc,rounding,c-strings,atof,C++,Mfc,Rounding,C Strings,Atof,我有一个CString变量,我需要将它转换为double CString sVal(_T(" 4.2")); double dbl2 = _wtof(sVal); 我得到了dbl2=4.0000,而不是4.2。舍入的原因是什么?小数点是本地化中的“项目”之一 警告!!!下面的代码未针对许多后续转换进行优化 #include <locale.h> #include <string> ... CString sVal(_T(" 4.2")); std::

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

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

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

小数点是本地化中的“项目”之一

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

#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
#包括
#包括
...
CString sVal(_T(“4.2”));
std::string currentLocale=setlocale(LC_NUMERIC,NULL)//检索当前区域设置
设置语言环境(LC_数字,“C”)//将数字区域设置更改为C,现在十进制分隔符为“”
双dbl2=_wtof(sVal);
setlocale(LC_NUMERIC,currentLocale.c_str())//返回到原始区域设置

请参见

能否显示包含此示例的完整主程序(并检查它是否首先显示问题)。理想情况下,您应该将其转换为使用标准
std::wstring
,但如果不是,我会更改标记以包含特定于MS的内容。您在欧洲大陆吗?(换句话说,您的机器是否设置了十进制分隔符
?)它可能正在进行特定于语言环境的转换。俄罗斯,setlocale(LC_ALL,.1251”);你是对的,替换“.”to“,”消除了问题对不起,俄罗斯确实是“欧洲大陆”,但我不知道你用什么来表示小数分隔符。“替换“.”to“,”消除了问题”-不,它没有。它只是用另一个问题取代了它。如果您在美英系统上运行此功能,您将返回到解决错误的状态。