C 语言:数据类型“double”的行为类似于数据类型“float”

C Language: The datatype "double" is acting like the datatype "float"

提问人:Shivam Dokania 提问时间:2/23/2023 最后编辑:Vlad from MoscowShivam Dokania 更新时间:2/23/2023 访问量:73

问:

我正在学习C语言。 我正在尝试打印数据类型为“double”的一组数字,但它只打印了像“float”这样的 7 位数字。

例如:

double temp = 23.3456789112345;

printf("%1f\n", temp);

输出:

23.345679

但是,一旦我更改了小数点的位置,如下所示:

double temp = 2334567.89112345;

printf("%1f\n", temp);

它输出如下:

2334567.891123

所以它几乎奏效了。它不是只输出 7 位数字,而是打印 13 位数字。但我认为数据类型“double”可以打印 15-16 位数字。

c printf 精度 转换说明符

评论

3赞 Fe2O3 2/23/2023
小数点后六位数字为“默认”。查看 “格式说明符” doco 中。如果您要求打印更多(或更少)数字,您可以获得更多(或更少)的数字。(进行实验,并注意数字也将正确四舍五入。printf()
0赞 M. Nejat Aydin 2/23/2023
有什么意义?1%1f
2赞 Lundin 2/23/2023
@M.NejatAydin:可能是错别字的意思?一些不适合编程的功能失调的字体具有相同的符号 (one) 和 (L)。%lf1l

答:

3赞 Vlad from Moscow 2/23/2023 #1

来自 C 标准(7.21.6.1 fprintf 函数)

f,F表示浮点数的双精度参数将转换为格式为 [−]ddd.ddd 的十进制表示法,其中 小数点字符后面的位数等于 精密规格。如果缺少精度,则将其视为 6个;如果精度为零且未指定 # 标志,则否 出现小数点字符。如果出现小数点字符, 它前面至少出现一个数字。该值四舍五入为 适当的位数。

例如,你可以写

double temp = 23.3456789112345;

printf("%.16f\n", temp);

请注意,(我认为您想使用而不是 )中的长度修饰符是多余的,并且没有效果。l%lf%lf%1f