Python 为什么这些操作返回0.0?

Python 为什么这些操作返回0.0?,python,python-2.7,math,Python,Python 2.7,Math,我的问题是为什么 import math a = math.sqrt(3) area = a * (1 / 2) print area 输出为0.0,但是 import math a = math.sqrt(3) area = a / 2 print area 给出一个0.866025403784的输出,我认为您使用的是Python2.7,这是Python2.7的问题,它将1/2计算为零,因为它将1和2都视为整数,所以它将结果视为整数,但在第二种情况下,您的math.sqrt()函数返回一个

我的问题是为什么

import math
a = math.sqrt(3)
area = a * (1 / 2)
print area
输出为0.0,但是

import math
a = math.sqrt(3)
area = a / 2
print area

给出一个0.866025403784的输出,我认为您使用的是Python2.7,这是Python2.7的问题,它将1/2计算为零,因为它将1和2都视为整数,所以它将结果视为整数,但在第二种情况下,您的math.sqrt()函数返回一个双精度值,所以它将结果视为双精度。但是如果你使用Python3.0,这个问题就解决了,在这两种情况下你都可以得到相同的结果,你可以试试看,它给出了1/2作为0.5。

实际上,这是2.X中的整数截断问题

X/Y 经典和真正的划分。 在Python2.X中,此运算符执行经典除法,截断整数的结果,并保留浮点数的余数(即小数部分)。 在2.X中,/执行经典除法,如果两个操作数都是整数,则执行截断整数除法,否则执行浮点除法(保留余数)

在Python3.X中,它执行真正的除法,始终在浮点结果中保留余数,而不考虑类型。 在3.X中,/now始终执行真除法,返回包含任何余数的浮点结果,而不管操作数类型如何

在Python2.X中,您可以通过在脚本中添加来自未来导入部分的来“修复”这个问题。当使用/运算符时,这将始终执行浮点除法,并使用//进行整数除法

但是你可以使除法中至少有一个操作数为浮点,你会得到一个浮点结果

面积=a*(1/2) 地区 0.8660254037844386


我希望这会对您有所帮助。

很抱歉,它说如果我缩进8个空格,它将格式化为代码??因此这两个示例中的区别是a/2与a*(1/2)相反,我使用的是sublime BTWBE,因为Python中的1/2是0。整数除法。在第二个例子中,一个操作数是float,所以浮点除法是done。Drew Li-你说得对,当我乘以0.5时,它给出了所需的输出,谢谢你的帮助!谢谢你们的帮助,伙计们:)
>>> from __future__ import division