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
,