首先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标准还是开发不可或缺的参考资料。