2017-02-09 91 views
0

我有一个CString变量,我需要转换成双C++ ATOF/_wtof,舍入误差

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

而且我得到DBL2 = 4.0000,而不是4.2。什么可能是四舍五入的原因?

+0

你能告诉包括这个样本,请完整的主程序(并检查它首先显示的问题)。理想情况下,您应该将其转换为使用标准的'std :: wstring',但如果不是,我会更改标签以包含MS特定的内容。 –

+3

你在欧洲大陆吗? (换句话说,你的机器是否设置了'',''小数点分隔符?)它可能正在进行特定于语言环境的转换。 –

+0

俄罗斯,setlocale(LC_ALL,“.1251”);你是对的,取代“。”到“,”消除了这个问题 –

回答

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/