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

小咪咪 2022-07-13 10:10 248阅读 0赞

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

  1. #include <stdio.h>
  2. int main()
  3. {
  4. double a = 423.43654;
  5. a = int(a*100+0.5)/100.0; //到这的a值变成了423.440000
  6. printf("%lf\n", a); //以小数后两位的形式输出
  7. return 0;
  8. }

运行结果:

423.44

负数的情况:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. double a = -423.43654;
  5. a = int(a*100-0.5)/100.0; //到这的a值变成了-423.440000
  6. printf("%.2lf\n", a); //以小数后两位的形式输出
  7. return 0;
  8. }

运行结果:

-423.44

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

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

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

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

  1. #include <stdio.h>
  2. #include <math.h>
  3. int main()
  4. {
  5. double a;
  6. int bit;
  7. printf("请输入你想要四舍五入的小数:\n");
  8. scanf("%lf", &a);
  9. printf("请输入你想要保留的位数:\n");
  10. scanf("%d", &bit);
  11. if (a > 0)
  12. {
  13. a = int(a*pow(double(10), double(bit))+0.5)/pow(double(10), double(bit))/1.0;
  14. }
  15. else
  16. {
  17. a = int(a*pow(double(10), double(bit))-0.5)/pow(double(10), double(bit))/1.0;
  18. }
  19. printf("%.*lf\n", bit, a); //精度控制处的*代表读取一个int型参数并把它当做精度,即读取bit
  20. return 0;
  21. }

运行结果:

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

and

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

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

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

发表评论

表情:
评论列表 (有 0 条评论,248人围观)

还没有评论,来说两句吧...

相关阅读