python round 和 int 的区别

问题描述 投票:0回答:3

我已经玩了一段时间Python,我注意到一个奇怪的行为让我很好奇:

float(int(n))
round(n)
之间有什么区别?

我什么时候应该使用其中一种、另一种或都不使用?

python python-2.7 floating-point int
3个回答
55
投票

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

为了完整起见,让我在您的问题中添加两个函数,并解释

float(int(x))
math.floor(x)
round(x)
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。当你开始一部分时,你必须支付全价。

让 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)==1
    floor(-1.01)==-2
  • ceil
    向无穷大舍入:它始终选择可能的最高答案:
    ceil(1.01)==2
    ceil(-1.99)=-1
  • int
    朝零舍入:对于正数
    x
    ,它就像
    floor
    ,对于负数
    x
    ,它就像
    ceil
  • round
    舍入到最接近的可能解决方案:
    round(1.49)=1
    round(1.51)==2
    。当
    x
    严格位于两个数字之间时,
    round(x)
    将是最接近的 偶数 数。这称为半到偶数舍入银行家舍入,因为它常用于金融计算。

注意: Python 实现在 2.7 和 3.x 之间发生更改:Python 2.7 不使用“半到偶数舍入”规则(如上所述),而是将所有半数舍入到远离零的位置:

round(1.5)==2
round(-1.5)==-2
。关心这一点的银行家和数学家一致认为 3.x 中使用的“半舍入到偶数舍入”规则是“正确的方法”,因为它公平地分配舍入误差。


12
投票

round(n)
是一个对浮点数进行四舍五入的函数,
int(n)
会将浮点数转换为整数,并通过截断来去掉小数部分。


6
投票

round
是数学舍入,
int
只是转换为整数,本质上是截断值。

取2个变量:

var1 = 5.5
var2 = 5.1

如果我们把它们围起来

round(var1)
round(var2)

我们分别得到 6.0 和 5.0。

但是,如果我们只是将它们转换为 int

int(var1)
int(var2)

我们两人都得到 5 分。

您可以在 python 解释器中自己测试一下。

© www.soinside.com 2019 - 2024. All rights reserved.