c++ 如何实现浮点数的四舍五入?

2024年11月28日 17:50
有4个网友回答
网友(1):

首先要明白浮点数在计算机中都绝大多数是近似值。其实C++对浮点数是自动四舍五入的,而且是非常严格地下一位为5则入,小于5则不入。这在double型时一般是没有问题的。在float型时,因精度低,内存中的近似值可能刚好使决定四舍五入的那一位的5不足额,造成不能四舍五入。例如float x=3.1415;,实际上内存中的二进制换算过来是3.14149999999999...;,这样取3位小数后就成了3.141而不是3.142了;如果换成double型,立马就变成3.142了。可以这样解决就保险了:float型的有效位是6位左右,给要输出的变量加一个1E-6,四舍五入的问题就解决了。如:

int main(void){
    double x=3.1415;
    cout << setprecision(4) << x << endl;
    return 0;
}

输出是3.142。

int main(void){
    float x=3.1415;
    cout << setprecision(4) << x << endl;
    return 0;
}

这个输出是3.141。

int main(void){
    double x=3.1415;
    cout << setprecision(4) << (x+1E-6) << endl;
    return 0;
}

的输出就是3.142了

网友(2):

double dround(double x,int bit)//double round
{
double y=1;
for(int i=0;i y *=10;
return (int)(x*y+0.5)/y;
}

网友(3):

double fun(double num, int n)
{
for(int i = 0; i < n; ++ i ){num *= 10;}

num = (num + 0.5) %1;

for(int i = 0; i < n; ++ i ){num /= 10;}

return num;
}

网友(4):

  /*编写一个函数double myround(double x),输入一个小数,将它四舍五入。
  *例如:myround(-3.51)的值是-4.0,myround(4.49)的值是4.0。可以调用math.h中的
  *库函数ceil和floor实现这个函数。*/
  #include
  #include
  double myround(double x);
  int main()
  {
  double num=1.00;
  printf("please enter the value of num(double):");
  scanf("%lf",&num);
  //printf("%lf\n",num);
  //printf("%lf\n",floor(num));
  printf("你输入的值进行四舍五入后的结果为:%lf\n",myround(num));
  return 0;
  }
  double myround(double x)
  {
  //double add=0.5;
  //int min,max;
  int sa,si;//sa用于保存x的整数部分,si用于保存加0.5后的临时值
  if(x==0.0)
  return 0.0;
  else
  if(x>0.0)
  {sa=(int)x;
  si=x+0.5;
  if(sa==floor(si))//如果if语句成立说明x的小数比0.5小,应当舍去
  return sa;
  else
  return sa+1;
  }
  else
  {sa=(int)x;
  si=x-0.5;
  if(sa==ceil(si))
  return sa;
  else
  return sa-1;
  }
  }