有谁知道四舍五入的函数怎么写的
有谁知道四舍五入的函数怎么写的 问题点数: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




