【c语言】printf保留小数输出会四舍五入吗?

引言

今天突然遇到一个问题:printf保留小数输出会四舍五入吗?

因此决定测试一下,以下均保留两位小数输出。

测试一:3.144和3.145

#include<stdio.h>

int main()
{
	double a = 3.144, b = 3.145;
	printf("a = %.2lf\nb = %.2lf", a, b);
	return 0;
}


//输出
//a = 3.14
//b = 3.15

这么一看好像确实可以实现四舍五入?

其实不然,再看一组测试样例。

测试二:3.185和3.195

#include<stdio.h>

int main()
{
	double a = 3.185, b = 3.195;
	printf("a = %.2lf\nb = %.2lf", a, b);
	return 0;
}


//输出
//a = 3.19
//b = 3.19

这时我们发现,a和b竟然都是3.19。

初步分析,pritnf函数不会进位,如果没有进位情况的话,是可以实现四舍五入的,否则不然。

简而言之,printf并不会严格实现四舍五入。

那么,有什么其它办法实现四舍五入吗?

当然是有的。

四舍五入

#include<stdio.h>
int main()
{
	double a = 3.185, b = 3.195;
	a = (int)((a * 1000 + 5) / 10) / 100.0;
	b = (int)((b * 1000 + 5) / 10) / 100.0;
	printf("a = %.2lf\nb = %.2lf", a, b);
	return 0;
}


//输出
//a = 3.19
//b = 3.20

此时就实现了四舍五入。

意思是,变量x是浮点类型,那就可以用x=(int)((x*1000+5)/10) / 100.0 来实现四舍五入。

(by 归忆)

猜你喜欢

转载自blog.csdn.net/qq1677852098/article/details/134754740