浮点数在 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
...等等
我开始学习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
...等等