C - strtod, кажется, добавляет цифры

У меня проблема с моим strtod() кажется, добавить несколько цифр. я читаю

2\t5241021356985.0302\t9.09\t825.45

из файла и после пропуска целого числа 2 Я получаю следующий вывод

output: 5241021356985.030273  9 .090000

Вот мой код

char *input_string = (char*) calloc(filesize, sizeof (char*));
char *output_string = (char*) calloc(filesize, sizeof (char*));
char *input_end;
fgets(input_string, filesize, infile);
input_end = input_string;
int size_to_read = (int) strtof(input_string, &input_end);
char *temp_string=(char*)calloc(70,sizeof(char*)); // max double value
double temp = 0;
++input_string;
for (int i = 0; i < size_to_read; ++i) {
   temp = strtod(input_string, &input_end);
   sprintf(temp_string, "%lf\t", temp);
   strcat(output_string, temp_string);
   input_string = input_end;
   ++input_string;
}
strcat(output_string, "\0");
printf("output: %s\n", output_string);

1 ответ

Как правило, введите double имеет точность около 16-17 десятичных цифр.
Теперь, это не некоторое количество цифр после десятичной точки - это общее количество значащих цифр, точка. (Вот почему это называется плавающей точкой.)

Так что не случайно, что число, которое вы читаете, и число, которое вы печатаете, отличаются примерно после 17-й цифры:

 input: 5241021356985.0302
output: 5241021356985.030273
digits: 1234567890123 4567890
                 1          2
Другие вопросы по тегам