Запутался, как преобразовать строку в двойную, используя strtod () в C ++ - PullRequest
3 голосов
/ 16 апреля 2011

Если бы кто-то мог объяснить, как использовать функцию, это было бы здорово.Я не понимаю параметры.

Спасибо

Ответы [ 4 ]

5 голосов
/ 16 апреля 2011

Первый параметр - указатель на символы. c_str () дает вам этот указатель из строкового объекта. Второй параметр не является обязательным. Он будет содержать указатель на следующий символ после числового значения в строке. См. http://www.cplusplus.com/reference/clibrary/cstdlib/strtod/ для получения дополнительной информации.

string s;
double d;

d = strtod(s.c_str(), NULL);
3 голосов
/ 16 апреля 2011

Первый аргумент - это строка, которую вы хотите преобразовать, второй аргумент - это ссылка на символ *, на который вы хотите указать первый символ после числа с плавающей точкой в ​​исходной строке (в случае, если вы хотите начать читать строка после номера). Если вам не важен второй аргумент, вы можете установить его в NULL.

Например, если у нас есть следующие переменные:

char* foo = "3.14 is the value of pi"
float pi;
char* after;

После pi = strtod(foo, after) значения будут:

foo is "3.14 is the value of pi"
pi is 3.14f
after is " is the value of pi"

Обратите внимание, что foo и after указывают на один и тот же массив.

1 голос
/ 16 апреля 2011

Если вы работаете в C ++, то почему бы вам не использовать std::stringstream?

std::stringstream ss("78.987");

double d;
ss >> d;

Или, еще лучше, boost::lexical_cast как:

double d;
try
{
    d = boost::lexical_cast<double>("889.978");
}
catch(...) { std::cout << "string was not a double" << std::endl; }
0 голосов
/ 16 апреля 2011

Я не понимаю параметров.

Проверьте эту ссылку strtod .Предоставляет всю информацию с примером.

...