簡體   English   中英

使用fscanf讀取double

[英]Read double using fscanf

我想從文本文件中讀取雙倍,例如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);

根據fscanf手冊頁 ,你應該使用%lf表示double:

f,e,g(浮點數):一系列十進制數字,可選地包含小數點,可選地前面帶有符號(+或 - ),可選地后跟e或E字符和十進制整數(或者一些strtod支持的其他序列)。 符合C99的實現在前面加上0x或0X時也支持十六進制浮點格式。
在此輸入圖像描述

我認為這些數字是正確閱讀的。 你的問題在於打印出來,這讓你覺得你沒有整數。 請記住, printf通常只在小數點后輸出幾位數字。

我建議你這樣做:

  1. printf調用中,使用如下格式說明符:“ %.20f ”。 它告訴printf在小數點后輸出20位數。
  2. 請記住,無論你使用什么浮點, floatdoublelong double ,它都將具有有限的精度和分辨率。 熟悉浮點數以及它們如何工作和表示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM