C中char数组到float转换错误

标签 c

我遇到以下情况,其中我正在逐行读取文件,其中前几行(示例)如下:

0.00000000000000000, 0.00000000000000000, 0.00000000000000000, 20.00000000000000000, 0.18854095325733133
0.00000000000000000, 0.00000000000000000, 0.00000000000000000, 28.88888888888888900, 0.18861310382752311
0.00000000000000000, 0.00000000000000000, 0.00000000000000000, 37.77777777777777900, 0.18870756072971304
0.00000000000000000, 0.00000000000000000, 0.00000000000000000, 46.66666666666667100, 0.18876790723761561
0.00000000000000000, 0.00000000000000000, 0.00000000000000000, 55.55555555555555700, 0.18879081871602224

以及行的处理:

fp = fopen(fn, "r");

if (fp == NULL) {
    <...>
}

while ((read = getline(&line, &len, fp)) !=-1) {
    <...>
    char *pt;
    pt = strtok(line,",");
    while (pt != NULL) {
        //order: pressure, velocity, strain, temp
        pnn = atof(pt);             //pressure
        pt = strtok(NULL, ",");

        vrm = atof(pt);             //velocity
        pt = strtok(NULL, ",");

        epx = atof(pt);             //elastic strain
        pt = strtok(NULL, ",");

        temp = atof(pt);            //temperature
        pt = strtok(NULL, ",");

        //reference friction coefficient
        REAL ref_ffric = (REAL)atof(pt);
        ref_fric = &ref_ffric;
        pt = strtok(NULL, ",");

REAL在此上下文中定义为 float

但是ref_fric从来都不是正确的数量,即第一行应该是 0.18854095325733133,但是当我打印出来时,它是 0.18854095041751862。

如何解决这个 char* 到 float 转换精度问题?

最佳答案

浮点型并不是完全精确,小数值的输出方式可能与输入时的方式不同。如果您可以使用 double 型,则更好。请参阅此相关问题:请参阅此相关问题:'float' vs. 'double' precision

关于C中char数组到float转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58627731/

相关文章:

java - 如何在 Mac OS X 中使用带有 Java 的 Windows DLL?

c++ - 每个线程都有自己的堆栈吗?

c - Yacc 找不到 YY_CURRENT_BUFFER

c - 如何在 VS 2022 中正确安装附加 C 头文件

c - 简单的 C 问题 : compare first char of a char array

android - 使用 Cygwin 创建 .SO 文件时出错

c - POSIX statvfs 所需的行为

C多线程malloc坏访问全局

char ** 和解引用指针

c++ - 如何包装 C __cdecl API 以便 FORTRAN 可以调用它(使用 __stdcall)?