为什么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()
答案 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)
都是0
,round(1.5)
是{ {1}})。
将一半舍入到最接近的整数总是必须打破以某种方式,并且不同的编程语言总是不同意如何执行此操作,IEEE 754 standard定义了5个不同的方法。 Python 3使用IEEE 754默认值并舍入halves to even,因为此方法的优点是没有符号偏差,并且在合理的数字分布中将产生相同的平均值。
答案 1 :(得分:0)
如果参数是浮点数,则Ceil(参数)将返回最接近的最大整数,-5比-6大BIGGER。至于round()请查看python的doc。我相信它很好解释。