c语言%f输出float型数据的四舍五入问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言%f输出float型数据的四舍五入问题相关的知识,希望对你有一定的参考价值。

#include <stdio.h>

int main()

float x =24.5766;

printf("x=%f\n",x);

return (0);


执行上述程序时输出为什么是24,576599?
改成float x = 24.5764;后,输出又为什么变成24.576401?

需要注意,%f如果没有规定长度或小数位数的话,就是输出6位小数
不论对应的数是什么类型,都输出6位小数
因为你的x是4位小数,少于6位
所以会在后面加两位小数补齐,至于那两位数是什么,要看后面的内存单元中存的是什么
(C语言会出现意外的内存访问,这点很不好)
也就是说 这不是什么四舍五入,而是将后面的内存单元变成了两位数而已

以你题目中的情况,还是用%.4f限定4位小数比较好
参考技术A 就是0.000001左右的误差问题,根本在于实数(float double)的内存表示问题。你可以看下实数在内存中的存储方法。实型数据在内存中存储的二进制位数是有限的,例如float型数据在内存中有24位二进制尾数。后面多出来的数据,就要看内存单元实际存储的内容了。 参考技术B printf("%2.4f", x);小数点前面是整数保留的位数,小数点后面是小数保留位数, float默认是保留8位

以上是关于c语言%f输出float型数据的四舍五入问题的主要内容,如果未能解决你的问题,请参考以下文章

C语言float问题,位数问题和四舍五入?

C语言float类型只打印一位小数会自动四舍五入吗

C语言有没有数据的四舍五入?啥情况下会用到四舍五入?数据类型转换?

c语言中将一个浮点型赋值给整型时,会不会四舍五入?

C语言编写程序,对一个double型数据进行四舍五入,要求保留两位有效小数,求算法。

C# float型数据 四舍五入 小数点后保留三位?