преобразование String в double в vc ++

Может ли кто-нибудь помочь мне преобразовать String в double в vc ++?

Я не могу использовать atoi, так как он преобразует char в double. Но я использую istringstream.

std::istringstream stm; 

double d;
String name = "32.67";

stm.str(name);
stm >>d; 

Это выдаст ошибку компиляции:

error C2664: 'void std::basic_istringstream::str(const std::basic_string &)' :
cannot convert parameter 1 from 'System::String ^' to 'const std::basic_string &'

Пожалуйста, помогите с другим решением или исправьте это.


person devan    schedule 25.06.2011    source источник
comment
возможный дубликат std :: string для float или double   -  person Assaf Lavie    schedule 25.06.2011
comment
выполните поиск по сайту - этот вопрос уже задавали много раз.   -  person Assaf Lavie    schedule 25.06.2011


Ответы (3)


std :: stringstream str () принимает в качестве аргумента std :: string. Вы передаете ему System :: String, откуда бы оно ни пришло. Учитывая напуганный символ ^, вы должны использовать C ++ / CLI, используя строки .NET.

Используйте std :: string, если вам по какой-либо причине не требуется использовать библиотеку .NET, и в этом случае вам нужно либо использовать функции преобразования .NET, либо преобразовать в std :: string (или char * c-string и использовать ‹# оператор).

person Justin Aquadro    schedule 25.06.2011

Как предлагает другой респондент, вы, вероятно, используете C ++ / CLI. В этом случае:

 String ^ name = "32.67";
 double d;
 d = Double::Parse(name);

Обратите внимание: если строка не может быть преобразована в двойную, будет выдано исключение. Используйте Double::TryParse, если хотите избежать этого (он возвращает false, если строку нельзя проанализировать).

person jonsca    schedule 25.06.2011

Я думаю, что это очень просто в программировании на vc ++ / CLR.

String ^name = "32.56";
String ^no = "56";

Double number_double = Convert::ToDouble(name); // convert String to double
Int number_int = Convert::ToInt32(no); // convert String to integer
person devan    schedule 27.06.2011