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