gpt4 book ai didi

c - 为什么带有 %.2g 的 printf 在点后不显示两位数?

转载 作者:行者123 更新时间:2023-12-04 00:50:24 25 4
gpt4 key购买 nike

#include <stdio.h>

int main()
{
printf("%.2g %.2f\n", 2.925, 2.925);
}

我认为正确的输出应该是:

2.93 2.93

现在,输出如下:

2.9 2.92

有两个误解:

  1. 为什么 '%.2g' 不显示点后的两位数?

  2. 为什么要四舍五入?

最佳答案

1。为什么位数不同?

printf 转换规范中的精度字段对于 fg 转换是不同的。来自标准(C17 草案,7.21.6 格式化输入/输出函数):

  • An optional precision that gives the minimum number of digits to appear for the d, i, o, u, x, and X conversions, the number of digits to appear after the decimal-point character for a, A, e, E, f, and F conversions, the maximum number of significant digits for the g and G conversions, ...

因此对于f,精度只指定小数点后位数,但对于g,它是的最大位数>所有数字

2。为什么数字会向下舍入?

当您在源代码中使用 float 时,需要在编译过程中将其从十进制形式转换为二进制形式。十进制数 2.925 不能完全转换为二进制形式,您的 double 类型的精度有限,值略小 (2.92499999999999982236... ).四舍五入到 2 位小数时,最接近的值为 2.92

关于c - 为什么带有 %.2g 的 printf 在点后不显示两位数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67018403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com