round和int之间的python差异

时间:2017-04-27 14:38:39

标签: python python-2.7 floating-point int

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

我应该何时使用其中一种,另一种或两种都不使用?

3 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:5)

为了完整起见,让我在您的问题中再添加两个函数,并解释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):
    print x, tab, int(x), tab, floor(x), tab, round(x), tab, ceil(x)

这是输出:

x       int floor   round   ceil
1.0     1   1.0     1.0     1.0
1.1     1   1.0     1.0     2.0
1.5     1   1.0     2.0     2.0
1.9     1   1.0     2.0     2.0
-1.1    -1  -2.0    -1.0    -1.0
-1.5    -1  -2.0    -2.0    -1.0
-1.9    -1  -2.0    -2.0    -1.0

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

  • floor向无穷远方向转:它总是选择最低的答案:floor(1.99)==1floor(-1.01)==-2
  • ceil向无穷大方向发展:它始终选择最高答案:ceil(1.01)==2ceil(-1.99)=-1
  • int向零舍入:对于正x,它就像floor,对于否定x,它就像ceil
  • round向最接近的解决方案前进:round(1.49)=1round(1.51)==2。当x恰好位于两个数字之间时,round(x)会从零开始:round(1.5)==2round(-1.5)==-2。这与int(x)在这种情况下的作用相反。

注意int(x)总是返回一个整数---其他函数返回浮点数。

答案 2 :(得分:3)

round是一个数学舍入,int只是强制转换为整数,基本上会截断该值。

取两个变量:

var1 = 5.5
var2 = 5.1

如果我们围绕它们

round(var1)
round(var2)

分别得到6.0和5.0。

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

int(var1)
int(var2)

我们两个都得到5分。

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