WHCSRL 技术网

C语言---四舍五入问题讨论

  1. #include <stdio.h>
  2. #include <math.h>
  3. int main(){
  4. double num_1=0.555,num_2=1.555,num_3=2.555,num_4=3.555;
  5. printf("%%.2f ",num_1);
  6. printf("%%.2f ",num_2);
  7. printf("%%.2f ",num_3);
  8. printf("%%.2f ",num_4);
  9. return 0;
  10. }
  11. 输出:
  12. 0.56
  13. 1.55
  14. 2.56
  15. 3.56

有一个没有四舍五入,说明编译器并不会自动实现四舍五入的。

但我们知道,浮点数赋给一个整数变量后,一定不会四舍五入

  1. #include <stdio.h>
  2. #include <math.h>
  3. int main(){
  4. double num_1=0.555,num_2=1.555,num_3=2.555,num_4=3.555;
  5. int num_1_1=num_1;
  6. int num_2_2=num_2;
  7. int num_3_3=num_3;
  8. int num_4_4=num_4;
  9. printf("%%d ",num_1_1);
  10. printf("%%d ",num_2_2);
  11. printf("%%d ",num_3_3);
  12. printf("%%d ",num_4_4);
  13. return 0;
  14. }
  15. 输出:
  16. 0
  17. 1
  18. 2
  19. 3

为了解决四舍五入的问题,提出了三个方法

方法一:使用库函数  #include <math.h>

此方法只适用于四舍五入取整

  1. #include <stdio.h>
  2. #include <math.h>
  3. int main(){
  4. double num_1=0.555,num_2=1.555,num_3=2.455,num_4=3.655;
  5. int num_1_1=round(num_1);
  6. int num_2_2=round(num_2);
  7. int num_3_3=round(num_3);
  8. int num_4_4=round(num_4);
  9. printf("%%d ",num_1_1);
  10. printf("%%d ",num_2_2);
  11. printf("%%d ",num_3_3);
  12. printf("%%d ",num_4_4);
  13. return 0;
  14. }
  15. 输出:
  16. 1
  17. 2
  18. 2
  19. 4

方法二:加0.5法   

此方法只适用于四舍五入取整

  1. #include <stdio.h>
  2. #include <math.h>
  3. //当一个数为1.555,加上0.5,变成2.055.如一个数为2.455,加上0.5,变为2.955.这时候取整,这正好符合我们四舍五入的要求。
  4. int main(){
  5. double num_1=0.555,num_2=1.555,num_3=2.455,num_4=3.655;
  6. int num_1_1=num_1+0.5;
  7. int num_2_2=num_2+0.5;
  8. int num_3_3=num_3+0.5;
  9. int num_4_4=num_4+0.5;
  10. printf("%%d ",num_1_1);
  11. printf("%%d ",num_2_2);
  12. printf("%%d ",num_3_3);
  13. printf("%%d ",num_4_4);
  14. return 0;
  15. }
  16. 输出:
  17. 1
  18. 2
  19. 2
  20. 4

方法三:强制转换            PS:强制转换优先级比自加自减靠前

  1. #include <stdio.h>
  2. #include <math.h>
  3. //当一个数为1.555,加上0.5,变成2.055.如一个数为2.455,加上0.5,变为2.955.这时候取整,这正好符合我们四舍五入的要求。
  4. int main(){
  5. double num_1=0.557,num_2=1.555,num_3=2.455,num_4=3.655;
  6. double num_1_1=(int)(num_1*100+0.5)*1.0/100; //四舍五入至小数点后二位
  7. double num_2_2=(int)(num_2*10+0.5)*1.0/10; //四舍五入至小数点后一位
  8. double num_3_3=(int)(num_3+0.5); //四舍五入至整数
  9. double num_4_4=num_4+0.5;
  10. printf("%%f ",num_1_1);
  11. printf("%%f ",num_2_2);
  12. printf("%%f ",num_3_3);
  13. printf("%%f ",num_4_4);
  14. return 0;
  15. }
  16. 输出:
  17. 0.560000
  18. 1.600000
  19. 2.000000
  20. 4.155000

推荐阅读