首页 > 解决方案 > C语言中%fl和%lf的区别

问题描述

我目前正在学习 C 语言数据类型,我尝试在输入“%”后打印编译器建议我使用 fl 的双变量,并且在精度小数行末尾得到 1 个数字。与 %lf 相比,它将总共打印六个精度小数

double num=12322;
printf("%lf",num);// result is 12322.000000
printf("%fl",num);// result is 12322.0000001 

我已经搜索了很多地方,但经常有人问 %f 和 %lf 之间的区别。我的情况可能一样吗?

标签: cprintfdoublemingwcodeblocks

解决方案


在这次呼吁中printf

printf("%lf",num);// result is 12322.000000

l转换说明符中的长度修饰符%lf无效。

来自 C 标准(7.21.6.1 fprintf 函数)

7 长度修饰符及其含义是:

l (ell) 指定后面的 d、i、o、u、x 或 X 转换说明符适用于 long int 或 unsigned long int 参数;后面的 n 转换说明符适用于指向 long int 参数的指针;后面的 c 转换说明符适用于 wint_t 参数;后面的 s 转换说明符适用于指向 wchar_t 参数的指针;或对后面的 a、A、e、E、f、F、g 或 G 转换说明符没有影响

在这次呼吁中printf

printf("%fl",num);// result is 12322.0000001 

在评论中应该写字母'l'而不是1您认为的数字

// result is 12322.000000l
                        ^^^

格式字符串"%fl"意味着由于转换规范,在输出 double 类型的对象后,%f将输出字母'l'

请注意,使用转换说明符f可以多使用一个字母'l',即大写字母'L'。在这种情况下,转换规范%Lf用于输出类型的对象long double


推荐阅读