浮点数在 C 中四舍五入

Floating point number is rounding off in C

我开始学习c。今天在做一个程序的时候,发现了一个有趣的东西,于是又做了一个小程序(和我的issue类似)来验证一下。

#include<stdio.h>
int main(void)
{
    float num1=867.0;
    float num2=.6921;
    printf("sum = %.4f \n",num1+num2);
    return 0;
}

如果我 运行 上面的程序,我得到 867.6921 作为答案。但如果我将 .4%f 更改为 %f,答案将更改为 sum = 867.692078。为什么输出会发生变化?另外,有什么方法可以不使用 .4%f?

得到答案吗?

but if i changed the .4%f to %f the answer is changing to sum = 867.692078

printf 将结果四舍五入到您指定的浮点数后的位数,默认为 .6。四舍五入时,它使用当前的floating point rounding mode,默认是四舍五入到最接近的。

float 类型具有大约七位精度(可以是 6-9 位之间的任何位置)。一种替代方法是使用 g 而不是 f。这修复了数字中精确数字的数量,而不仅仅是小数点后的数字。

  printf("sum = %.7g \n",num1+num2);

这会产生输出

sum = 867.6921

and 将始终为任何输入提供七位精度。数字格式类似于:

0.000000E+07
0000000
000000.0
00000.00
0000.000
000.0000

...等等