考虑一下Python部门:
基数= 12.0
高度= 16
面积= 1/2 *基础*高度
解决方案显示了这一点
面积=(基*高)/2;
令我困惑的是,1/2将是浮动的,而Python只显示0,而不是0.5。为什么解决方案在这种情况下使用/2?
发布于 2014-02-14 00:06:17
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) / 2或192 / 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
卡佩特吸烟者的替代解决方案:
from __future__ import division这一行将在Python2.x程序中给出Python3.x的行为,Python 3.x接受/操作符作为浮点除法,即使这两个值都是整数类型。因此,在导入此操作之后,/将成为浮点除法操作符。
>>> from __future__ import division
>>> 1/2
0.5发布于 2014-02-14 00:58:12
整数除法是一个人的位置上的剩余部分被简单地丢弃的地方。将7分成3,我们将得到3堆2,剩下一堆,因此:
7 / 3 = 2Python有两种常用的数字类型:整数(只能表示整数)和浮点数(用来表示十进制数)。传统上,在许多编程语言(C、Java等)中,对相同类型的两个对象执行基本操作(如+、-、*或/ )将为您提供另一个该类型的对象。如果它们是不同的,那么其中一个对象将安全地http://en.wikipedia.org/wiki/Type_conversion到更通用的表单。这通常导致一个不能表示分数的整数被转换为浮点数,而浮点数可以。然后将这两个浮子分开,产生另一个浮子。
因此,在Python2中,当您使用带有两个整数的运算符/时,结果将是一个整数。1/2是0.5,但是小数部分被丢弃了,所以留给您的是0。
但是,在Python3 / 被修改中,总是要转换为浮点数,从而导致真正的除法。1/2 = 0.5和2/1 = 2.0。对于新程序员来说,这是“预期的”行为,可以为现有的程序员提供更干净的代码。在Python2中,可以通过在脚本顶部添加一个未来进口来模拟这种新行为:
from __future__ import division如果您确实希望在Python或3.x中使用截断除法,那么就会有一个新的2.5+操作符来模仿旧的/。
https://stackoverflow.com/questions/21768286
复制相似问题