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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言有没有数据的四舍五入?啥情况下会用到四舍五入?数据类型转换?相关的知识,希望对你有一定的参考价值。

C语言中的float和double类型数据是浮点数,所以小数部分就存在四舍五入问题,当指定输出位数在精度范围之内时,系统会自动舍入,无需人工干预,如果小数部分也在精度范围内,比如10.0/2.0 = 5.0,2位以上的输出位数时,后面的都是0,此时,当然不需要舍入了。
数据类型转换有两种方式,一种是默认强制转换,比如将char、short、Int、Long和float类型数据赋给double类型变量时,编译程序会自动实施转换,这是因为,在精度更高时,这样的转换是内有损失的。另一种是手动强制类型转换,比如dnum = (double)inum;,意思是将整形变量inum首先转换为双精度数据,然后再付给dnum。当将高精度类型变量赋给低精度类型变量时,除非手动强制转换,否则,编译程序会有提示的。
参考技术A 有四舍五入的情况,在你想要保留几位小数的时候,多余的紧接着的一位要四舍五入
不过C里面没有提供四舍五入的函数,不过你可以这样
a = (int)(a*100 + 0.5)/100
这只是一个小技巧,对a的第三位进行四舍五入本回答被提问者采纳
参考技术B 浮点运算时,由于精度的问题,涉及到了四舍五入,这也是为什么一个很大的数和一个很小的数相加,会出错的原因。
但数据类型强制转换时,是采取的舍弃原则,没有四舍五入。
参考技术C 数据强制转换是用舍弃的方法,不会用四舍五入,什么时候用四舍五入是需要详细说明的,也就是你的业务需求而定,你可以把数字+0.5,然后进行强制转换 参考技术D double强制转换成int型的时候保留整数部分的。。
比如double a=1.5;
int b=a;
a就是1。

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语言有没有数据的四舍五入?啥情况下会用到四舍五入?数据类型转换?的主要内容,如果未能解决你的问题,请参考以下文章

c语言中有没有进行四舍五入的函数

C语言怎么四舍五入

Java强制转换为啥没有四舍五入

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

c语言中浮点数四舍五入 。 保留一个浮点数小数点后的6位,第3位要四舍五入。如 1.1234.567到1234.570000

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