C++四舍五入问题

来源:互联网 发布:编程模块都有哪些 编辑:程序博客网 时间:2024/05/22 13:40

floor

函数定义与语法

  函数名: floor  

       功 能: 返回小于或者等于指定表达式的最大整数  

      用 法: double floor(double x);  

     头文件:math.h

#include <stdio.h>  

#include <math.h>  

int main(void)  

{  

double number = 123.54;  

double down, up; 

 down = floor(number);  

up = ceil(number);  

printf("original number %10.2lf\n",number);  

printf("number rounded down %10.2lf\n",down);  

printf("number rounded up %10.2lf\n",up);  

return 0; 

 }  

运行结果:  

original number 123.54 

number rounded down 123.00  

number rounded up 124.00


程序例2:

void main()
{
    int i = 5;
    int s = i + 0.8 ;
    cout<<s<<endl;
}

输出结果为 s = 5 ;

即:高精度像低精度转换,小树部分会被截去。。整数只要加上小数,,小数无论是多大,,都会被舍去,,即使是0.9



/*编写一个函数double myround(double x),输入一个小数,将它四舍五入。

02*例如:myround(-3.51)的值是-4.0,myround(4.49)的值是4.0。可以调用math.h中的
03*库函数ceil和floor实现这个函数。*/
04#include <stdio.h>
05#include <math.h>
06double myround(doublex);
07int main()
08{
09    doublenum=1.00;
10    printf("please enter the value of num(double):");
11    scanf("%lf",&num);
12    //printf("%lf\n",num);
13    //printf("%lf\n",floor(num));
14    printf("你输入的值进行四舍五入后的结果为:%lf\n",myround(num));
15    return0;
16}
17double myround(doublex)
18{
19    //double add=0.5;
20    //int min,max;
21    intsa,si;//sa用于保存x的整数部分,si用于保存加0.5后的临时值。整数部分的四舍五入
22    if(x==0.0)
23    return0.0;
24    else
25        if(x>0.0)
26        {sa=(int)x;
27         si=x+0.5; 
28         if(sa==floor(si))//如果if语句成立说明x的小数比0.5小,应当舍去
29             returnsa;
30         else
31             return sa+1;
32         }
33         else  //负数部分的四舍五入
34         {sa=(int)x;
35          si=x-0.5;
36            if(sa==ceil(si))
37                returnsa;
38            else
39                returnsa-1;
40          }
41}
注意:
    double i = 5.6;
    int k  =(int)i;

    cout<<i<<endl;

结果:i = 5.6

即:(int)i----i的值不会变!!static_cast<int>(i);中,i的值也不会变!!!

double i = 5.6;
    int k  =static_cast<int>(i);
    cout<<i<<endl;



原创粉丝点击