gpt4 book ai didi

C - strtod 似乎添加了数字

转载 作者:行者123 更新时间:2023-11-30 19:40:03 27 4
gpt4 key购买 nike

我的 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);

最佳答案

通常,double 类型的精度约为 16-17 位十进制数字。
现在,这不是小数点后的位数,而是有效数字的总数。 (这就是为什么它被称为 float 点。)

因此,您读入的数字和您打印出来的数字在第 17 位数字之后有所不同,这并非巧合:

 input: 5241021356985.0302
output: 5241021356985.030273
digits: 1234567890123 4567890
1 2

关于C - strtod 似乎添加了数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35901628/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com