【问题标题】:Force Python calculation in double [duplicate]强制Python计算双[重复]
【发布时间】:2013-04-28 17:16:25
【问题描述】:

我想在 Python 中打印一个 double。但它不起作用,我不知道为什么。

我的代码:

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

即使我执行以下操作,我总是得到 0 而不是 0.001

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

我得到的是0.000000000,而不是0.001

我如何告诉 Python 这应该是一个双精度数?

【问题讨论】:

标签: python


【解决方案1】:

在 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 2.x 中导入 Python 3.x 的除法,其中整数除法导致 true 除法:

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

注意,这会影响整个模块的划分。

【讨论】:

  • 以及如何将 len(MyList) 转换为浮点数?
  • @gurehbgui 使用 float(): float( len(MyList) )
  • 可选from future import true_division,如果它不会破坏模块中的其他内容
  • 另一种解决方法是from operator import truediv; x * truediv (y, z)
  • @JonClements 不知道operator.truediv
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    此行为在 Python 3.x 中已修复。正如其他答案中所指出的,解决方法是将整除数转换为float

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

    【讨论】:

      猜你喜欢
      • 2020-12-10
      • 2014-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-28
      • 2022-01-13
      • 2021-11-14
      • 1970-01-01
      相关资源
      最近更新 更多