C语言中float类型输出会四舍五入吗?你绝对不知道的float

在初学C语言中很多人都知道int类型是不会四舍五入的,它只会取整数部分。就例如以下代码:

#include <stdio.h>
int main()
{
	int a = 14.99;
	printf("%d", a);
	return 0;
}

学过C语言的朋友肯定都知道输出的值为14,而不会因为你后面的.99四舍五入打印出15。

但是,你有没有想过对于flaot类型的数在输出是会不会出现四舍五入呢?于是,我带着这个疑问便在我的编译器上进行了实验,结果如下:

 此时,看到结果的我很很是疑惑,因为如果计算机四舍五入的话应该输出0.005,0.005,0.004。

如果计算机不会四舍五入的话应该输出0.004,0.004,0.004。而输出这个结果又是什么意思呢?难道计算机是五舍六入的计算?于是我带着这个疑问将数变大一些试试,结果如下:

看到这个结果,我更加的震惊,这次又是个什么情况?怎么一会进行四舍五入,一会又不就行四舍五入。我甚至一度怀疑我的电脑出错。

于是,带着这份疑惑,开启了网上寻答,最后得出了这样一个结果:

原来,计算机是无法准确表示一个数的。计算机只能以一个非常靠近这个的数字来表示这个数字。举个例子来说:printf("%.3f"0.0046)输出的为0.005是四舍五入的结果,而printf("%.3f"0.0045)输出的为0.004其实也是四舍五入的结果,这些在你的编译器尝试一下就明白了,就比如:

 可以看到0.0046在计算机中是以0.460000……的形式存储的,四舍五入后就自然的输出0.005.

而0.0045在计算机中则是以0.0044999……的形式存储的,四舍五入后也就自然的输出0.004.

同理可得,0.0044应该输出的为0.004,结果也正如我们所料。

之后我们再来看那两组略大一些的数:

 来看第一组那三个数:

3.46在计算机中是以3.46000……的形式存储的,因此四舍五入后应输出3.5.

3.45在计算机中是以3.45000……的形式存储的,因此四舍五入后应输出3.5.

3.44在计算机中是以3.44000……的形式存储的,因此四舍五入后应输出3.4.

之后再来看第二组那三个数:

4.46在计算机中是以4.46000……的形式存储的,因此四舍五入后应输出4.5.

4.46在计算机中是以3.44999……的形式存储的,因此四舍五入后应输出4.4.

4.46在计算机中是以3.44000……的形式存储的,因此四舍五入后应输出4.4.

而结果也正如我们所猜测的那样。

因此我们就可以的出结论:

C语言中float类型输出是四舍五入的!!!

扩展:

有上文可知在计算机中,对于浮点型数据的存储是通过距离这个数字很近的一个数字来表示这个数字,这个数字与你想要表达的数字是有误差的,而这个误差就是浮点数的误差。又因为double类型表示的数据精度更大,因此用定义double类型的变量比float类型的变量要更加精准:

 由上图显而易见的看出double类型的变量比float类型的变量要更加精准。

但对于一个浮点型的数据,无论是float类型,还是double类型,其值在计算机中存储都是有些许误差的,因此无法非常精准的表达一个浮点型数据。

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值