2013-06-23 6 views
2

Извините за мой английский.C++ MFC double to CString

Мне нужно преобразовать двойное значение в CString, потому что мне нужно сделать AfxMessageBox (double_value);

Я нахожу это:

std::ostringstream ost; 
ost << double_value; 
std::cout << "As string: " << ost.str() << std::endl; 
//AfxMessageBox(ost.str()); - Does not work. 

Как я могу это сделать?

+0

, конечно, он не будет работать - AfxMessageBox ожидает двойной, почему он должен иметь возможность получить cstring? – Infested

+0

AfxMessageBox не ожидает двойной ... – zmbq

+0

@zmbq does not AfxMessageBox (* double_value *); не предполагайте, что он ожидает двойной? – Infested

ответ

12

AfxMessageBox ожидает CString объекта, поэтому формат двойной в CString и передать, что:

CString str; 
str.Format("As string: %g", double); 
AfxMessageBox(str); 

Edit: Если вы хотите, чтобы значение, отображаемое в виде целого числа (без значения после десятичной точки), а затем использовать это вместо :

str.Format("As string: %d", (int)double); 
+0

Big thx, это работа. Пожалуйста, если вы знаете - скажите мне, как я могу обрезать/вырезать часть CString. У меня значение 12.09, мне нужно 12 значений. – user2254511

+0

Используйте '% d' вместо'% g', он должен дать вам целочисленное значение. – olevegard

+0

@ user2254511 Я обновил свой ответ. – trojanfoe

0

Это потому, что ost.str() не является CString, а скорее строковым объектом C++. Вам нужно преобразовать это в CString: new CString(ost.str()).

+0

Извините, im beginner CString sss = new CString (ost.str()); Не работает – user2254511

0

в зависимости от Unicode настроек требуется

std::ostringstream ost; 
ost << std::setprecision(2) << double_value; 
std::cout << "As string: " << ost.str() << std::endl; 
AfxMessageBox(ost.str().c_str()); 

или

std::wostringstream ost; 
ost << std::setprecision(2) << double_value; 
std::wcout << L"As string: " << ost.str() << std::endl; 
AfxMessageBox(ost.str().c_str()); 

Это необходимо потому, что CString есть конструктор для const char* или const wchar_t*. Нет конструктора для std :: string или std :: wstring. Вы также можете использовать CString.Format, который имеет те же проблемы, что и типы, такие как sprintf.

Помните, что двойное преобразование зависит от региона. Десятичный разделитель будет зависеть от вашего местоположения.