为什么Python将变量视为整数,而不允许小数?

时间:2014-01-23 20:35:42

标签: python

在一些简单的数学中,我在这里尝试从总数中得到目标的百分比。已经完成的是积极的。根据我的理解,下面的数学应该给我一个50的百分比,但运行它,Python坚持给我零。为什么会这样?

Total =  2
Positives = 1
Percentage = (Positives/Total)*100
print ('Percentage is: ' + str(Stat) + '%\n' )

>>>Percentage is: 0%

3 个答案:

答案 0 :(得分:3)

在Python 2中,如果两个参数都是整数,则除法运算符(/)返回一个int,如果至少有一个参数是浮点数,则返回一个浮点数。

print 1 / 2   # 0
print 1 / 2.0 # 0.5

您可以使用from __future__ import division指令强制进行浮点除法。

from __future__ import division
print 1 / 2  # 0.5
print 1 // 2 # 0 (// is always integer division)

Python 3默认启用了浮点除法。

另请注意,即使您没有//,Python 2和3中也存在from __future__ import division运算符整数除法,并且始终返回整数。

最后,请注意我们在这里讨论浮点数http://en.wikipedia.org/wiki/IEEE_floating_point_number),而不是小数。如果你真的想要小数(较慢,但具有任意精度),请查看Python标准库中的decimal模块。

答案 1 :(得分:1)

要在字面上声明一个浮点数,在其末尾添加.0

>>>Total =  2.0
>>>Positives = 1.0
>>>Percentage = (Positives/Total)*100
>>>print Percentage
50.0

在Python2中,两个整数之间的除法返回一个整数。你需要在分区中至少有一个浮点数让它返回一个浮点数。

答案 2 :(得分:1)

如果将所有整数放入等式中,Python会假定您需要一个整数作为结果。
(int / int == int)因此以下代码返回零:

>>> 1/2
0 

如果你想在结果中使用float,你需要确保你的一个输入变量是float:
(int / float = float)或(float / int = float)

>>> 1/2.0
0.5

你也可以使用演员来做同样的事情:

>>> float(1)/2
0.5

并非您必须在分割发生之前将其中一个变量更改为浮点数,否则您将获得意外结果。以下命令除以int(1)/ int(2),返回0,然后尝试将0转换为float:

>>> float(1/2)
0.0
相关问题