2013-05-04 60 views
0

我想在Python中打印双精度值。但它不起作用,我不知道为什么。双重强制Python计算

我的代码:

test = 3000/(1500 * 2000) 
print str(test) 

我总是得到0而不是0.001即使我做到以下几点:

test = 3000/(1500 * 2000) 
print '%.10f' % test 

我得到一个0.000000000,而不是0.001

我该如何告诉Python,这应该是一个双?

+1

如果你没有使用Python的老版本,你不会有这个问题。 – 2013-05-04 11:02:12

+1

我不会打电话2.x'旧'版本的Python – sapi 2013-05-04 11:11:02

+2

Duplicate:http://stackoverflow.com/questions/1787249/why-doesnt-this-division-work-in-python,http:// stackoverflow .com/questions/2958684/python-division等 – 2013-05-04 11:15:36

回答

4

在Python 2.x的,你需要的操作数漂浮的至少一种转化,如截断输出整数除法结果在Python 2.x中:

>>> 3000/(1500 * 2000) 
0 
>>> 3000.0/(1500 * 2000) # Or use float(3000) 
0.001 
>>> float(3000)/(1500 * 2000) 
0.001 

也可以导入Python 3中的分工.X在Python 2.x中,其中整数除法结果真正师:

>>> from __future__ import division 
>>> 3000.0/(1500 * 2000) 
0.001 

注意,这会影响部门的整体模块中。

+0

以及如何将len(MyList)转换为浮点数? – gurehbgui 2013-05-04 10:59:14

+1

@gurehbgui使用'float()':'float(len(MyList))' – 2013-05-04 11:00:01

+0

(可选)'从将来导入true_division',如果它不会破坏模块中的其他东西 – 2013-05-04 11:00:29

3

这是因为您只在数学运算中使用了整数值。因此结果将是一个(截断的)整数。如果你想要一个浮点数结果,至少需要一个浮点数操作数。

0

此行为已在Python 3.x中修复。正如其他答案中指出的那样,修复方法是将可分割的数字转换为float

如果你想使/工作作为在Python 3.x中,那么你可以做:from __future__ import division,然后你就需要使用//操作来实现旧的行为。您可以查看Python文档以获取有关operators的信息。