Lia*_*iam 4 python floating-point int python-2.7
我现在一直在玩python,我注意到一种奇怪的行为让我很好奇:float(int(n))和之间的区别是round(n)什么?
我什么时候应该使用一个,另一个或两者都不使用?
Yaa*_*lch 10
为了完整起见,让我增加两个功能,你的问题,并解释之间的差异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)
Run Code Online (Sandbox Code Playgroud)
这是输出:
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
Run Code Online (Sandbox Code Playgroud)
你看,这四个函数中没有一个是相同的.
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)从零开始舍入:round(1.5)==2和round(-1.5)==-2.这与int(x)本案例中的做法相反.请注意,int(x)始终返回一个整数---其他函数返回浮点数.
round是一种数学舍入,int只是转换为整数,本质上是截断该值。
取2个变量:
var1 = 5.5
var2 = 5.1
Run Code Online (Sandbox Code Playgroud)
如果我们把它们围起来
round(var1)
round(var2)
Run Code Online (Sandbox Code Playgroud)
我们分别得到 6.0 和 5.0。
但是,如果我们只是将它们转换为 int
int(var1)
int(var2)
Run Code Online (Sandbox Code Playgroud)
我们给他们俩都打了 5 分。
您可以在 python 解释器中自己测试一下。
| 归档时间: |
|
| 查看次数: |
6348 次 |
| 最近记录: |