3

我想从文本文件中读取双精度,例如 31 39.9316476397222 116.113516352222

我都试过了,都不行。我只能读取前几个十进制数字,例如 39.93164 而不是 39.9316476397222 有人知道为什么吗?谢谢!

int NodeID;
double _lat,_long;
fscanf (pFile, "%d %lf %lf", &NodeID,&_lat,&_long);
printf ("I have read: %d %f %f\n", NodeID,_lat,_long);

fscanf (pFile, "%d %lf %lf", &NodeID,&_lat,&_long);
printf ("I have read: %d %lf %lf\n", NodeID,_lat,_long);
4

2 回答 2

20

根据fscanf 手册页,您应该使用%lffor double :

f, e, g(浮点数):一系列十进制数字,可选地包含一个小数点,可选地前面有一个符号(+ 或 -),可选地后跟一个 e 或 E 字符和一个十进制整数(或一些strtod 支持的其他序列)。符合 C99 的实现也支持以 0x 或 0X 开头的十六进制浮点格式。
在此处输入图像描述

于 2015-02-17T16:28:42.823 回答
7

我认为这些数字被正确读取。您的问题在于您的打印输出,这使您认为您没有完整的数字。请记住,printf通常只输出小数点后的几位数字。

我建议你这样做:

  1. 在您的printf通话中,使用如下格式说明符:“ %.20f”。它告诉printf输出小数点后的 20 位数字。
  2. 请记住,无论您使用什么浮点数,floatordoublelong double,它的精度和分辨率都是有限的。熟悉浮点数及其工作方式和表示方式。
于 2013-07-25T08:12:31.633 回答