round函数

1、round()函数—奇进偶舍

奇进偶舍,又称为四舍六入五成双规则、银行进位法。

它是一种计数保留法。从统计学的角度,“奇进偶舍”比“四舍五入”更为精确:在大量运算时,因为舍入后的结果有的变大,有的变小,更使舍入后的结果误差均值趋于零。而不是像四舍五入那样逢五就进位,导致结果偏向大数,使得误差产生积累进而产生系统误差。

“奇进偶舍”使测量结果受到舍入误差的影响降到最低。

但是 这样就会间接的影响到我们试图实现四舍五入的操作。

2、奇进偶舍的具体规则

  • 要求保留位数的后一位如果是4,则舍去。例如5.214保留两位小数为5.21。
  • 如果保留位数的后一位如果是6,则进上去。例如5.216保留两位小数为5.22。

上面这两点是和四舍五入相同的,差别出现在下面,当需要保留的位数的后一位,为5的时候。

如果保留位数的后一位如果是5,而且5后面不再有数,要根据应看尾数“5”的前一位决定是舍去还是进入:

  • 如果是奇数则进入,如果是偶数则舍去。例如5.215保留两位小数为5.22; 5.225保留两位小数为5.22。
  • 如果保留位数的后一位如果是5,而且5后面仍有数。例如5.2254保留两位小数为5.23,也就是说如果5后面还有数据,则无论奇偶都要进入。

3、python实现四舍五入

也就是说,用round(a,b)不能保证将浮点数a四舍五入保留b位小数。

https://blog.csdn.net/doudou_nc/article/details/98507849

a1 = Decimal('1.125').quantize(Decimal('0.00'),rounding=ROUND_HALF_UP)
  • 别忘了引入decimal模块
  • Decimal后面这个参数用字符串形式

4、向下取整

直接用内建的 int() 函数即可

>>> a = 3.75
>>> int(a)
3

5、向上取整

向上取整需要用到 math 模块中的 ceil() 方法:

>>> import math
>>> math.ceil(3.25)
4.0
>>> math.ceil(3.75)
4.0
>>> math.ceil(4.85)
5.0

6、分别取整数部分和小数部分

有时候我们可能需要分别获取整数部分和小数部分,这时可以用 math 模块中的 modf() 方法,该方法返回一个包含小数部分和整数部分的元组:

import math math.modf(3.25) (0.25, 3.0) math.modf(3.75) (0.75, 3.0) math.modf(4.2) (0.20000000000000018, 4.0)

有人可能会对最后一个输出结果感到诧异,按理说它应该返回 (0.2, 4.0) 才对。这里涉及到了另一个问题,即浮点数在计算机中的表示,在计算机中是无法精确的表示小数的,至少目前的计算机做不到这一点。上例中最后的输出结果只是 0.2 在计算中的近似表示。Python 和 C 一样, 采用 IEEE 754 规范来存储浮点数,如果希望更详细的了解这一点,可以参考知乎话题: 为什么0.1+0.2=0.30000000000000004而1.1+2.2=3.3000000000000003?

results matching ""

    No results matching ""