为什么round()和math.ceil()为Python 3中的负数赋予不同的值?

时间:2018-02-10 17:17:02

标签: python algorithm math

为什么round()和math.ceil()为Python 3中的负数提供不同的值?

例如,

for errimg in anomalylist:
  print (errimg)  
  showimg = image.load_img(errimg, target_size=(224, 224))
  plt.imshow(showimg)   
  plt.show()

2 个答案:

答案 0 :(得分:4)

这些函数执行不同的数学运算:

  • round()将浮点值舍入到最接近的整数。如果两侧的两个整数中的任何一个相等距离,则选择偶数

    此处, 整数始终为-6;对于-5.5,最近的偶数整数为-6,而不是-5

  • math.ceil()将最大整数大于或等于返回到浮点值。

    此处,下一个大于的整数总是-5(请记住负数从零开始减少)。

我认为你最大的困惑来自甚至舍入规则。如果您选择了-4.5,那么您已经看到round()返回-4

>>> import math
>>> math.ceil(-4.5)
-4
>>> round(-4.5)
-4

来自round() function documentation

  

如果两个倍数相等,则向均匀选择舍入(例如,round(0.5)round(-0.5)都是0round(1.5)是{ {1}})。

将一半舍入到最接近的整数总是必须打破以某种方式,并且不同的编程语言总是不同意如何执行此操作,IEEE 754 standard定义了5个不同的方法。 Python 3使用IEEE 754默认值并舍入halves to even,因为此方法的优点是没有符号偏差,并且在合理的数字分布中将产生相同的平均值。

答案 1 :(得分:0)

如果参数是浮点数,则Ceil(参数)将返回最接近的最大整数,-5比-6大BIGGER。至于round()请查看python的doc。我相信它很好解释。