C语言小数四舍五入输出可控制位数

本文章说明怎样使得你能保留小数点后几位(四舍五入)及其可控制的位数的实现:


#include <stdio.h>

int main()
{
	double a = 423.43654;		
	a = int(a*100+0.5)/100.0;	//到这的a值变成了423.440000

	printf("%lf\n", a);			//以小数后两位的形式输出
	return 0;
}

运行结果:

423.44


负数的情况:

#include <stdio.h>

int main()
{
	double a = -423.43654;
	a = int(a*100-0.5)/100.0;		//到这的a值变成了-423.440000

	printf("%.2lf\n", a);			//以小数后两位的形式输出
	return 0;
}

运行结果:

-423.44


由上面两个实例可以看出区别,正负数都能得到相应的结果。

原理是:比如当一个数要保留n位时,我们可以先将其乘上10的n次方在加减去0.5,然后除以10的n次方(后面的.0不能省略,因为这保证了最后运算出来的是个小数)。

拿上面的实例来说吧:
(423.43654*100+0.5)/100 == 423.440000,也就是说这一步的运算已经将位数(两位)确定,而后面没保留的位数变为零了,最后我们要做的就是将它以两位小数的形式输出(%.2lf)。


下面我介绍一种可以自己输入控制保留位数的实现方法:  

#include <stdio.h>
#include <math.h>

int main()
{
	double a;
	int bit;
	printf("请输入你想要四舍五入的小数:\n");
	scanf("%lf", &a);
	printf("请输入你想要保留的位数:\n");
	scanf("%d", &bit);

	if (a > 0)
	{
		a = int(a*pow(double(10), double(bit))+0.5)/pow(double(10), double(bit))/1.0;
	}
	else
	{
		a = int(a*pow(double(10), double(bit))-0.5)/pow(double(10), double(bit))/1.0;
	}
	
	printf("%.*lf\n", bit, a);	//精度控制处的*代表读取一个int型参数并把它当做精度,即读取bit
	return 0;
}

运行结果:

请输入你想要四舍五入的小数:
21.124685
请输入你想要保留的位数:
3
21.125

and

请输入你想要四舍五入的小数:
-21.124685
请输入你想要保留的位数:
3
-21.125


总结:这样就可以实现可控制的小数位数输出。


ps:如果我有错误的地方还是有什么好的方法实现,请告诉我,我会改进。谢谢。

  • 21
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值