C++ ATOF/_wtof,舍入误差
问题描述:
我有一个CString变量,我需要转换成双C++ ATOF/_wtof,舍入误差
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
你能告诉包括这个样本,请完整的主程序(并检查它首先显示的问题)。理想情况下,您应该将其转换为使用标准的'std :: wstring',但如果不是,我会更改标签以包含MS特定的内容。 –
你在欧洲大陆吗? (换句话说,你的机器是否设置了'',''小数点分隔符?)它可能正在进行特定于语言环境的转换。 –
俄罗斯,setlocale(LC_ALL,“.1251”);你是对的,取代“。”到“,”消除了这个问题 –