python round 和 int 的区别

新手上路,请多包涵

我一直在玩 python 一段时间,我注意到一个奇怪的行为让我很好奇: float(int(n))round(n) 之间有什么区别?

我什么时候应该使用一个、另一个或两者都不用?

原文由 Liam 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

注意:python 实现在 2.7 和 3.x 之间发生了 变化。我相应地更正了答案。

For the sake of completeness, let me add two more functions to your question and explain the differences between float(int(x)) , math.floor(x) , round(x) and math.ceil(x)

让我们从一个问题开始:“什么整数最能代表数字 1.6?”我们有两个可能的答案(1 和 2),但是一个答案可能比另一个更好的原因有很多:

  • int(1.6)==1 :这是你截掉小数点后得到的。
  • math.floor(1.6)==1 : 少于2个。不完整的部分不算数。
  • round(1.6)==2 :因为2比1更近。
  • math.ceil(1.6)==2 : 不止1个,入手一个part的时候要全价。

让我们让 python 打印一个漂亮的表格,其中包含您使用不同的 x 值获得的结果:

 from math import floor, ceil
tab='\t'

print('x \tint\tfloor\tround\tceil')
for x in (
    1.0, 1.1, 1.5, 1.9, -1.1, -1.5, -1.9,
    -2.5, -1.5, -0.5, 0.5, 1.5, 2.5,
):
    print(x, tab, int(x), tab, floor(x), tab, round(x), tab, ceil(x))

这是输出:

 x       int floor   round   ceil
1.0     1   1       1       1
1.1     1   1       1       2
1.5     1   1       2       2
1.9     1   1       2       2
-1.1    -1  -2      -1      -1
-1.5    -1  -2      -2      -1
-1.9    -1  -2      -2      -1
-2.5    -2  -3      -2      -2
-1.5    -1  -2      -2      -1
-0.5    0   -1      0       0
0.5     0   0       0       1
1.5     1   1       2       2
2.5     2   2       2       3

您会看到这四个函数中没有一个是相等的。

  • floor 向负无穷大舍入:它总是选择可能的最低答案: floor(1.99)==1floor(-1.01)==-2
  • ceil 向无穷大舍入:它总是选择最高可能的答案: ceil(1.01)==2ceil(-1.99)=-1
  • int rounds towards zero: For positive x it is like floor , for negative x it is like ceil .
  • round 四舍五入到最接近的可能解决方案: round(1.49)=1round(1.51)==2 。当 x 恰好在两个数字之间时, round(x) 将是最接近的 _偶数_。这称为 四舍五入银行家四舍五入,因为它通常用于财务计算。

注意: python 实现在 2.7 和 3.x 之间发生了 变化:Python 2.7 不使用“半数到偶数舍入”规则(上面解释过)但将所有半数从零舍入: round(1.5)==2round(-1.5)==-2 。关心这一点的银行家和数学家一致认为 3.x 中使用的“一半到偶数舍入”规则是这样做的“正确方法”,因为它公平地分配了舍入误差。

原文由 Yaakov Belch 发布,翻译遵循 CC BY-SA 4.0 许可协议

round(n) 是一个舍入浮点数的函数, int(n) 将浮点数转换为整数,并通过截断它来去除小数部分。

原文由 Silveris 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题