CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

有谁知道四舍五入的函数怎么写的

楼主h_jch(风过无痕)2003-08-02 16:49:05 在 C/C++ / C语言 提问

有谁知道四舍五入的函数怎么写的 问题点数:20、回复次数:19Top

1 楼zfbt(子非鱼)回复于 2003-08-02 17:14:59 得分 5

int   x   =   10;  
  int   y   =   4;  
  int   z   =   (10*x)/y;  
  if((z%10)   >=5)  
  z   +=   10;  
  z   =   z/10;Top

2 楼bluei(蓝之我)回复于 2003-08-02 17:19:33 得分 5

double   x=1.4;  
  double   y=1.6;  
  int   i=(int)(x+0.5);//i=1,四舍  
  int   j=(int)(y+0.5);//j=2,五入Top

3 楼Inkick(星点)回复于 2003-08-02 17:22:14 得分 0

楼上的算法不错,不过还不完善呢~  
  Top

4 楼Inkick(星点)回复于 2003-08-02 17:24:17 得分 5

double   x=1.4;  
  double   y=1.6;  
  int   iTemp1   =   (int)(x+0.5);  
  int   iTemp2   =   (int)(y+0.5);    
  int   i=   iTemp1   -   (int)(x);//i=0,四舍  
  int   j=   iTemp2   -   (int)(y);//j=1,五入  
  Top

5 楼xdzr(仙道)回复于 2003-08-02 17:27:05 得分 5

float   f(float   num,   int   n)                     //n为保留的小数为数  
  {     num=num+pow(10,-(n+1))*5;  
        num=(int)(num*pow(10,n));  
        num=num/pow(10.n);  
        return   num;  
  }  
   
  eg:1.004(保留2位)  
        num=1.004+0.005=1.009  
        num=1.009*100=100.9(取正)=》num=100  
        num=100/100=1  
   
   
  Top

6 楼bluei(蓝之我)回复于 2003-08-02 17:27:42 得分 0

哈,连擦屁股纸扔哪儿都想到了,高!Top

7 楼jumpcolor(跳动de色彩)回复于 2003-08-02 19:34:38 得分 0

苯苯的办法~~~~~~~~~~~~~  
  if(i>0)  
  {  
  if((i-i/1)>0.5)  
  return(i/1+1);  
  else  
  return(i/1);  
  }  
  else  
  {  
  if((i/1-i)>0.5)  
  return(i/1-1);  
  else  
  return(i/1);  
  }Top

8 楼WindsonZhL(风之子)回复于 2003-08-02 19:51:48 得分 0

利用库函数好像更简单:  
   
  double   round(double   x)  
  {  
    if(   abs(x)-floor(abs(x))   <   ceil(abs(x))-abs(x)   )  
      return   x<0   ?   ceil(x)   :   floor(x);  
    else  
      return   x<0   ?   floor(x)   :   ceil(x);  
  }Top

9 楼jumpcolor(跳动de色彩)回复于 2003-08-02 19:55:59 得分 0

改一下  
  苯苯的办法~~~~~~~~~~~~~  
  if(i>0)  
  {  
  if((i-i/1)>=0.5)  
  return(i/1+1);  
  else  
  return(i/1);  
  }  
  else  
  {  
  if((i/1-i)>=0.5)  
  return(i/1-1);  
  else  
  return(i/1);  
  }  
  Top

10 楼WindsonZhL(风之子)回复于 2003-08-02 20:21:53 得分 0

return   (i>0)   ?   (   ((i-i/1)>=0.5)   ?   (i/1+1)   :   (i/1)   )   :   (   (i/1-i)>=0.5)   ?   (i/1-1)   :   (i/1)   );Top

11 楼snowman_pc(cpp)回复于 2003-08-02 20:27:03 得分 0

 
   
  int   abc(int   n)  
  {  
      return   int(n+0.5);  
  }Top

12 楼snowman_pc(cpp)回复于 2003-08-02 20:27:51 得分 0

呵呵,  
   
  我的最精简  
   
  10.3  
  int(10.3+0.5)=10  
  10.6  
  int(10.6+0.5)=11Top

13 楼steedhorse(晨星)回复于 2003-08-02 20:33:04 得分 0

楼上的对。  
  double   d   =   ……;  
  int   i   =   int(d   +   0.5)Top

14 楼antijpn(antijpn)回复于 2003-08-02 23:16:20 得分 0

楼上的,好像不行吧?这样的话只能对小数第一位进行四舍五入,如果要对第二位进行四舍五入这个方法就不行了。  
   
  我看这个东西很有难度,到时候还要考虑到小数在用float和double无法表示的情况,很复杂  
  除非自己写一个struct或者class来保存小数,否则这个问题恐怕无法解决了Top

15 楼steedhorse(晨星)回复于 2003-08-02 23:35:21 得分 0

哦,我以为是从浮点数到整数的四舍五入呢,先入为主了,不好意思。  
   
  楼上说得对,大部分10进制浮点数是无法用有限位的2进制浮点数来表示的。  
  不知道楼主到底要做什么。事实上,我觉得的“四舍五入”的结果往往只是程序的使用者想从界面上看到的结果,所以完全可以通过把原来的数据经过相应处理以字符串的形式呈现给用户,这肯定是没问题的,而且也不难实现。  
  但程序中或者数据库里保存的东西尽量还是不要影响它原来的形式,改用全精度的浮点数还是要浮点数,千万不要四舍五入之后保存,事实上,那往往也是做不到的。Top

16 楼jumpcolor(跳动de色彩)回复于 2003-08-03 16:01:04 得分 0

snowman_pc(cpp)的行么?对于负数就有些问题了吧!!Top

17 楼Riemann()回复于 2003-08-03 17:32:24 得分 0

int   round(float   x)  
  {  
          int   y;  
          y   =   (int)(x+0.5);  
          return   y;  
  }Top

18 楼Riemann()回复于 2003-08-03 17:39:42 得分 0

对负数也成立Top

19 楼h_jch(风过无痕)回复于 2003-08-28 10:10:45 得分 0

大家给的答案太好了。。分不够给。。请见谅了。。下次补上Top

相关问题

  • VC++中有没有求四舍五入的函数有,写出来
  • 有没有四舍五入的函数?
  • 求四舍五入函数,急。
  • 请教四舍五入的函数
  • 四舍五入的函数是什么?
  • 四舍五入的函数是什么?
  • 高分求两个函数(四舍五入和截位函数)
  • 请问c中四舍五入的函数是怎样的?
  • CB中四舍五入是什么函数?
  • 请教四舍五入函数的问题

关键词

  • 函数
  • 四舍五入
  • elsereturn
  • 小数
  • itemp
  • 浮点数
  • num
  • pow
  • 保存
  • double

得分解答快速导航

  • 帖主:h_jch
  • zfbt
  • bluei
  • Inkick
  • xdzr

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo