我正在尝试扫描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]);
假设abc.csv包含
11.654,22.332
11.654,22.332
11.654,22.332
当我打印时,我得到输出,
11.654000, 22.332001
11.654000, 22.332001
11.654000, 22.332001
额外的.000001来自哪里?
感谢任何帮助。提前谢谢。
答案 0 :(得分:5)
与scanf无关。这是因为float
表示/存储在内存中的方式。
尝试以下方法:
float x = 22.332;
printf("%f\n", x);
你会看到结果是一样的。
答案 1 :(得分:1)
浮点数用IEEE-754(单或双)等标准存储在内存中,这些标准不能代表您期望的每个浮点数,因为它们是浮点数。浮点存储的准确性不是恒定的,所以他们试图将数字四舍五入到可以存储的最接近的数字。
printf中%f的默认精度为6,您可以将其设置为3
printf("%.3f, %.3f\n",pts[i][0],pts[i][1]);