首先long double是C99引入的,但是如何printf格式化一個long double的數據的呢?
scanf一個double數據,是%lf,printf一個float或者double都是%f。
但是輸出一個long double是什么格式呢?
這個時候,我們需要c標准:
7 The length modifiers and their meanings are: 第七節,長度修飾符及其含義是:
截取需要部分,
指定以下d,i,o,u,x或X轉換說明符適用於
long int或unsigned long int參數; n 轉換說明符適用於指向long int參數的指針; c 轉換說明符適用於wint_t參數; s 轉換說明符適用於指向wchar_t參數的指針; 或對以下a,e,e,E,f,F,g或G轉換沒有影響
由於 ll與l描述很相近,不再翻譯。
再看大寫的L:
指定以下a,A,e,E,f,F,g或G轉換說明符適用於long double參數。
如果一個長度修飾符出現在除上述指定的任何轉換說明符之外, 這種行為是未定義的。
后面是一個f與F的解釋:
我想此刻結論已經明顯了:
#include<stdio.h> int main(void) { long double std_test=1.2345; printf("%Lf\n",std_test); return 0; }
大寫L,加f輸出long double。最后的f小寫和大寫沒影響,但是第一個 l 必須大寫成L。
如果寫成小寫l加f的格式,會報類型不兼容,這樣也達不到比double還高的精度。
所以,c標准還是開發不可或缺的參考資料。