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:如果我有错误的地方还是有什么好的方法实现,请告诉我,我会改进。谢谢。
还没有评论,来说两句吧...