我正在尝试扫描csv文件.这是代码.
FILE *fp;
float pts[1000][2];
char line[1000];
int n = 0;
fp = fopen("abc.csv","r");
n = 0;
while(fgets(line, sizeof line, fp))
{
sscanf(line,"%f,%f",&pts[n][0],&pts[n][1]);
n++;
}
for(i=0;i<n;i++)
printf("%f, %f\n",pts[i][0],pts[i][1]);
Run Code Online (Sandbox Code Playgroud)
假设abc.csv包含
11.654,22.332
11.654,22.332
11.654,22.332
Run Code Online (Sandbox Code Playgroud)
当我打印时,我输出为,
11.654000, 22.332001
11.654000, 22.332001
11.654000, 22.332001
Run Code Online (Sandbox Code Playgroud)
额外的.000001来自哪里?
任何帮助表示赞赏.提前致谢.
小智 5
与scanf无关.这是因为float在内存中表示/存储的方式.
请尝试以下方法:
float x = 22.332;
printf("%f\n", x);
Run Code Online (Sandbox Code Playgroud)
你会看到结果是一样的.
请看:https://softwareengineering.stackexchange.com/questions/101163/what-causes-floating-point-rounding-errors
| 归档时间: |
|
| 查看次数: |
106 次 |
| 最近记录: |