在Python中使用整数除法

时间:2014-02-14 00:04:12

标签: python

你能帮我弄清楚这个Python部门吗

base = 12.0

身高= 16

面积= 1/2 *基础*高度

解决方案显示了这个

area =(base * height)/ 2;

让我感到困惑的是,1/2将是浮点数而Python只显示0而不是0.5为什么解决方案在这种情况下显示/ 2 ...

2 个答案:

答案 0 :(得分:3)

Python2.7自动使用/运算符作为整数(整数)除法,它将始终生成整数。

例如:

1/2 = 0

3/4 = 0

100/30 = 3

要进行浮点除法,必须将一个或两个值作为浮点类型。

像这样:

Area = 1.0/2 * Base * Height # 1.0 is a float type, 1 is an integer type

结果不是您所期望的,因为Python使用整数除法和操作顺序来评估表达式。

如果您在Python中评估16 * 12 / 2,Python会将其解释为(16 * 12) / 2192 / 2 = 96

如果您评估1/2 * 16 * 12,Python会将其解释为(((1/2) * 16) * 12) = (0 * 16) * 12

更多示例:

Area = Base * Height * (1.0/2.0)

Python这次评估(1.0 / 2.0)第一次,因为操作顺序要求首先评估括号。由于1.0和2.0是浮点数而不是整数,因此Python可以执行浮点除法。你明白了:

Base * Height * (0.5)
= 192 * 0.5
= 96

,它可以满足您的期望。

相反:

Base * Height * (1/2)
= Base * Height * (0) # since 1/2 rounds down to 0 in integer division
= 192 * 0
= 0


Carpetsmoker的替代解决方案:

from __future__ import division

这一行将在Python2.x程序中提供Python3.x行为,并且Python3.x接受/运算符作为浮点除法,即使两个值都是整数类型。因此,导入后,/将成为浮点除法运算符。

>>> from __future__ import division
>>> 1/2
0.5

答案 1 :(得分:1)

整数除法是简单地丢弃超出一个位置的余数。将7分为3将给我们3堆2,剩下一个,因此:

7 / 3 = 2

Python有两种常用的数字类型:整数,只能表示整数,浮点数,可以表示十进制数。传统上,在许多编程语言(C,Java等)中,对两个对象执行基本操作,例如+-*/。相同的类型将为您提供该类型的另一个对象。如果它们不同,其中一个对象将安全地typecast为更通用的形式。这通常会导致一个整数,它不能表示分数,被投射到浮点数,这可以。然后将两个浮子分开,产生另一个浮子。

因此,在Python 2中,当您使用带有两个整数的运算符/时,结果将是一个整数。 1/20.5,但小数部分会被丢弃,因此您将留下0

但是,在Python 3 / was modified中总是强制转换为浮点数,从而导致真正的除法。 1/2 = 0.52/1 = 2.0。对于新程序员来说,这是“预期”行为,可以为现有程序员提供更清晰的代码。通过在脚本顶部添加future import,可以在Python 2中模拟这种新行为:

from __future__ import division

如果您确实需要Python 2.5+或3.x中的截断分区,则会有新的//运算符模拟旧的/