簡體   English   中英

ansi-c fscanf問題

[英]ansi-c fscanf problem

嗨,我讀文件如下

       fscanf(fp,"%f %f %f\n",&*(p1+i), &*(p2+i), &*(p3+i));

我文件的行由三個浮點數組成...

我的問題是,在文件中,我有一些浮點,例如,點后最多兩位數。 但是當我要求c使用不同格式來打印這些值時,例如%lf,%。2lf,%。4lf ...它開始使用數字播放...我唯一關心的是這個,如果我說1343.23在文件中,然后c將使用此值與計算中的值完全相同,否則它將使用點后的數字進行播放。 如果可以播放,那么如何使其完全使用浮點數呢? 例如在最后一種情況下,即使我要求它使用%.10lf打印該值,我也希望它僅打印1343.2300000000。 非常感謝!

“問題”是浮點數根據定義是近似的。 您應該閱讀每位計算機科學家應該了解的有關浮點算法的更多信息。

另外,您可以將&*(x)簡化為x ,因此應在fscanf調用中寫出p1+ip2+ip3+i

當您讀入字符串1343.23時,將其視為十進制數,它將轉換為計算機的內部二進制表示形式。 使用格式說明符輸出會從二進制轉換為十進制。 在輸出時,如果要求在小數點后輸入不同位數,則可能不會獲得完全相同的值。 在有限長度的二進制浮點數中,特定的浮點十進制數可能無法精確表示,因此應該四舍五入。

要獲得更好的解釋,請參閱著名的文章《每個科學家對浮點算法的了解》

點后的位數與fscanf沒有任何區別。 您應該擺脫&*並在字符串的末尾添加新行:

fscanf(fp, "%f %f %f\n", p1 + i, p2 + i, p3 + i);

暫無
暫無

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

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