[New knowledge] How to round a float point number

一、浮点数的存储

        一个浮点数由两个数M和E来表示: M*b^E。

        其中b是基数(记数系统的基);M是尾数,形如±d.ddd...ddd(每一位是一个介于0到b-1之间的整数,包括0和b-1);E是阶码。

        如果M的第一位是非0整数,则此表达式为正规化表达式。

        这种存储格式的优点是:可以在某个固定长度的存储空间内表示整型数据无法表示的更大范围的数。

        在C语言中,浮点数有三种:float(单精度)、double(双精度)、long double(长双精度)。下面主要以单精度为例进行说明。 

       以单精度为例。(单精度二进制小数,使用32位存储)   

             
 

注:  (1) S:符号位。1代表负数,0代表正数。 

          (2) E:阶码。用余码来表示,根据IEEE754,余码为余2^(n-1)-1(其中n为阶码所占二进制位数)。 

          (3) M:尾数。保证精确度。


二、浮点数的取整 

        C语言对于浮点数有以下几种取整方法: 

 (1) 强制类型转换:直接赋值给整数变量。 (直接舍去小数部分

        例如:int i = 2.5;或 i = (int) 2.5;//i=2 。


(2)使用   double floor(double x)   函数。( 返回的是小于或等于x的最大整数)                     ========>>>>>>>>floor 是地板的意思

        例如:int i = floor(2.5);// i=2; 或int i = floor(-2.5);// i=-3  


(3)使用   double ceil(double x)   函数。( 返回的是大于x的最小整数)                                     ========>>>>>>>>ceil是天花板的意思

        例如:int i = ceil(2.5);// i=3  int i = ceil(-2.5);// i=-2  


(4)使用long double roundl(long double x);    double round(double x);      float roundf(float x); 函数。(返回的是四舍五入后的整数值

        例如:round(1.499900) is 1.000000;或round(1.500001) is 2.000000。

       

注:1、floor()是向负无穷大舍入,floor(-2.5) =-3;ceil()是向正无穷大舍入,ceil(-2.5) =-2。这两个函数包含于<math.h>头文件中。

         2、后缀 l, f也可以加在ceil 和 floor后,意义和用法同 round


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值