Преобразование строки в двойную - PullRequest
0 голосов
/ 09 апреля 2011

У меня есть следующий код, который не работает должным образом.

char dec_number[300];
dec_number[0]='\0';
//some code that reads a decimal number and stores it in dec_number
//I get in dec_number 0.19

При печати значения я получаю 0.19.

После этого я хочу умножить его начто-то, поэтому мне нужно хранить его в двойном формате.

Я конвертирую его в двойной, используя double k=atod(dec_number); и k=strtod(dec_number, NULL);.Но я получаю 9716 или что-то большое, но ничего рядом с 0.19.

Что я сделал не так?Какие-либо предложения?Спасибо.

Ответы [ 7 ]

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

Вы конвертируете это неправильно, по-видимому. Никто здесь не обладает телепатическими способностями (я полагаю), поэтому нет никакого способа сказать, что вы делаете неправильно, пока вы не покажете нам свой код, где вы конвертируете свою строку в double.

В любом случае, правильный способ преобразования строки в double - использовать функцию strtod.

char *end;
double d = strtod(dec_number, &end);
/* Perform error handling be examining `errno` and, if necessary, `end` */

Используете ли вы strtod?

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

Ты #include <stdlib.h>?Если нет, то это может означать, что atof или strtod должны возвращать int и читать из любых функций определения местоположения, которые обычно возвращают целые числа, что приведет к бессмысленным ответам.

0 голосов
/ 09 апреля 2011

Попробуйте это:

double k;

sscanf(dec_number,"%lf",&k);
// k is the double value stored in the buffer

sprintf(buffer,"%f",k)
// buffer is now containing the representation of k
0 голосов
/ 09 апреля 2011

С завершенными нулем строками atof и strtod делают то, что вы хотите, но очень прощающие.
Если вы не хотите принимать строки типа «42life» как действительные, вы можете обернуть strtod следующим образом:

double strict_strtod(char* str)
{
    char* endptr;
    double value = strtod(str, &endptr);
    if (*endptr) return 0;
    return value;
} 
0 голосов
/ 09 апреля 2011

Используйте parseFloat (), оно должно работать.

0 голосов
/ 09 апреля 2011

Не видя больше кода, я предполагаю, что вы не заканчиваете нулем dec_number, когда читаете число.

0 голосов
/ 09 апреля 2011

просто используйте atof функцию:

#include <cstdlib>

char *str_number = "0.19";
double val = atof(str_number);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...