您的位置:首页 > 编程语言 > C语言/C++

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

2017-01-05 10:31 281 查看
本文章说明怎样使得你能保留小数点后几位(四舍五入)及其可控制的位数的实现:

#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:如果我有错误的地方还是有什么好的方法实现,请告诉我,我会改进。谢谢。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: