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

2024-04-24 22:16:21 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

>>>Percentage is: 0%

Tags: 目标is数学stattotal百分比print总数
3条回答

在Python2中,除法运算符(/)如果两个参数都是整数,则返回一个int;如果其中至少一个参数是float,则返回float。在

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

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

^{pr2}$

Python3默认启用浮点除法。在

另外,请注意,//运算符integer division在python2和python3中都存在,即使您没有from __future__ import division,并且始终返回一个整数。在

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

要真正声明一个float,在它的末尾添加一个.0

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

在Python2中,两个整数之间的除法返回一个整数。在除法中至少需要一个float才能使它返回一个float。在

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

>>> 1/2
0 

如果要在结果中使用浮点,则需要确保其中一个输入变量是浮点:
(int/float=float)或(float/int=float)

^{pr2}$

也可以使用强制转换来执行相同的操作:

>>> float(1)/2
0.5

并不是说在除法发生之前必须将其中一个变量更改为float,否则会得到意外的结果。以下命令将返回0的int(1)/int(2)除以,然后尝试将0转换为浮点:

>>> float(1/2)
0.0

相关问题 更多 >