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

保留小数点后面的N位,第n+1位进行四舍五入!请大神运用c++解决一下!谢了... 保留小数点后面的N位,第n+1位进行四舍五入!请大神运用c++解决一下!谢了 展开
 我来答
White_MouseYBZ
2015-03-04 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6652万
展开全部

首先要明白浮点数在计算机中都绝大多数是近似值。其实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了

bhtzu
2015-03-04 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4232万
展开全部
double dround(double x,int bit)//double round
{
double y=1;
for(int i=0;i<bit;i++)
y *=10;
return (int)(x*y+0.5)/y;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
幻形术
2015-03-04 · TA获得超过1262个赞
知道小有建树答主
回答量:994
采纳率:81%
帮助的人:264万
展开全部
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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
w别y云j间
高粉答主

推荐于2017-10-08 · 繁杂信息太多,你要学会辨别
知道大有可为答主
回答量:8903
采纳率:91%
帮助的人:800万
展开全部
  /*编写一个函数double myround(double x),输入一个小数,将它四舍五入。
  *例如:myround(-3.51)的值是-4.0,myround(4.49)的值是4.0。可以调用math.h中的
  *库函数ceil和floor实现这个函数。*/
  #include <stdio.h>
  #include <math.h>
  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;
  }
  }
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式