ansi c中的转换问题

标签 c floating-point floating-accuracy atof

<分区>

Possible Duplicates:
Floating point inaccuracy examples
Is JavaScript's Math broken?

我需要将一些数据从 txt 文件转换为 double 值,为此我正在使用此函数:atof。 问题是必须转换的值是 5.550000 并且 atof 函数返回 5.5499999999999998 这是一个问题,因为我必须用这个数字计算 GPA,而结果并不精确。 这是从 txt 文件中读取数据的函数:

void readNext(FILE* file,Lab* lab)
{
    char line[100];
getline(file,line,100);
if (strcmp(line,"") == 0)
{
    lab->is_null = 1;
    return;
}
strcpy(lab->date,line);
getline(file,line,100);
lab->presence = atoi(line);
getline(file,line,100);
strcpy(lab->num_work,line);
getline(file,line,100);
lab->mark_work = atof(line);
getline(file,line,100);
lab->test_work = atof(line);
getline(file,line,100);
lab->current = atof(line);
getline(file,line,100);
lab->status_work = atoi(line);
getline(file,line,100);
}

最佳答案

参见 this StackOverflow 文章。

如果没有一些额外的工作, float 将有问题来表示您想要的精确值。您将面临两个问题(在链接的帖子中描述)- 实际舍入和格式设置。

关于ansi c中的转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6193439/

相关文章:

c - 在非实时操作系统/内核上执行接近实时任务的最佳方法是什么?

c# - Visual C# 方法调用使用过多内存?

c - 用整数除以 double

python - 如何避免具有多列的 numpy 数组的总和精度较低

c - C中如何将每手牌先按牌值排序,再按花色排序?

C - 比较并将 char* 转换为 char

c - 使用 C 中的指针将二维数组中的行传递给函数

java - 为什么当我使用变量时我的 vector 的大小更准确?

SQLite 查询带 float 的 where 子句失败?

c# - 我什么时候会遇到C#中Double类型的问题(比特币的小数点后8位)?