char *c = "12.3" Как хранить 12.3 в двойной переменной

Я читаю из файла, который имеет числа (некоторые целые и двойные) и разделены ','. пример: 12.2,55.9,12.5 Я разделил каждое число с помощью strtok() и сохранил его указатель. (Я использовал 'c' НЕ C++).

char * num1 = "12.2";
char * num2 = "55.9";
char * num2 = "12.5";

Я хочу хранить каждое число в своей двойной переменной.

Я устал

double numD1 = atof(num1);
double numD1 = double(num1);

2 ответа

РЕДАКТИРОВАТЬ, чтобы добавить вызов errno == ERANGE; ниже для иллюстрации

Во-первых, в своем сообщении вы указали, что пытались:

char * num1 = "12.2";  
double numD1 = atof(num1); 

Это должно было сработать.

Самый простой способ: (как вы уже попробовали)

double x = atof("12.2");

atof - конвертирует начальную часть строки в двойное представление.

Лучше было бы:

double x = strtod("12.3", &ptr); //

strtod - конвертирует начальную часть строки в двойное представление. Функция пропускает пробельные символы в начале строки. Преобразование останавливается, когда достигается символ, который не может быть частью числа. strtod получает указатель на не преобразованную часть строки. Ожидаемая форма предметной последовательности - необязательный знак плюс или минус, затем непустая последовательность цифр, необязательно содержащая символ десятичной точки, затем необязательная часть экспоненты.
Дополнительно:
Если strtod() не может преобразовать строку, поскольку правильное значение находится за пределами диапазона представимых значений, тогда для errno устанавливается значение ERANGE (определено в errno.h).

Вот пример использования strtod(); с двумя входами: (также иллюстрирует использование errno)

#include <errno.h>

int main ()
{
    char input[] = "10.0 5.0";
    char badInput[] = "0.3e500";
    char *ptr, *ptr2;
    double a, b, c;
    int err;

    a = strtod (input,&ptr);
    b = strtod (ptr,0);
    if(errno != ERANGE)
    {
        printf ("Output= %.2lf\n", a/b);
    } else printf("error\n");

    c = strtod (badInput, &ptr2);
    if(errno != ERANGE)
    {
        printf ("errno is %d\n", errno);
    } else printf("error\n");
    getchar();

    return 0;
}  

За atof для корректной работы необходимо включить заголовочный файл stdlib.h,

Другие вопросы по тегам