2017-02-09 28 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/

 Смежные вопросы

  • Нет связанных вопросов^_^