【问题标题】:python round problempython圆形问题
【发布时间】:2010-09-01 20:02:53
【问题描述】:

我在分割时遇到了问题

my max_sum = 14
total_no=4  

所以当我这样做时

print "x :", (total_sum/total_no)

,我得到 3 而不是 3.5

我尝试了多种打印方式,但都失败了,有人可以告诉我我用什么方式打印 3.5 格式吗?

谢谢

【问题讨论】:

  • 您使用的是哪个版本的 Python?

标签: python rounding division python-2.x integer-division


【解决方案1】:

在 Python 2.x 中,默认情况下将两个整数相除会得到另一个整数。这通常令人困惑,并且已在 Python 3.x 中得到修复。您可以通过将其中一个数字转换为浮点数来绕过它,这将自动转换另一个:

float( 14 ) / 4 == 3.5

相关PEP是number 238:

当前除法 (/) 运算符有 模棱两可的意思 数值参数:它返回数学的下限 如果参数是整数或长整数,则除法的结果,但它 返回除法结果的合理近似值,如果 参数是浮点数或复数。这使得表达式期待 当整数不是时,浮点或复杂结果容易出错 预期但可能作为输入。

由于严重的向后兼容性问题,它在 Python 2.x 中没有更改,但它是 Python 3.x 中的主要更改之一。你可以用这条线强制新的划分

from __future__ import division

在 Python 脚本的顶部。这是一个__future__-import——它用于强制进行语法更改,否则可能会破坏您的脚本。还有很多其他的__future__ 导入;在准备迁移到 Python 3.x 时使用它们通常是一个好主意。

请注意,// 运算符始终表示整数除法;如果你真的想要这种行为,你应该优先使用它而不是/。请记住,“显式胜于隐式”!

【讨论】:

  • 这非常好用,谢谢,但我们的想法是在返回结果时保持直观
  • @learner:什么?我不明白你的评论。如果您想要浮点除法,请将其中一个参数转换为浮点数。
  • 如果您不喜欢添加 .0float() 的“cruft”,from __future__ import division 将为整个脚本或交互式会话(您在其中键入命令)一)。
【解决方案2】:

您将两个整数相除,结果也将是一个整数,在 python 2 中。尝试将您的操作数之一设为浮点数,如 max_sum = 14.0total_no = 4.0 以获得浮点数结果。

如果您希望 python 2.X 在这方面表现得更直观,您可以添加

from __future__ import division

在脚本的顶部。在 python 3 中,除法按您的预期工作。

【讨论】:

  • 这对我们到底有什么作用?
【解决方案3】:

使 max_sum=14.0 或 total_no=4.0

【讨论】:

  • 可能有助于解释@learner 正在经历整数除法。
  • -1 第一次发布的答案没有帮助。如果很明显 OP 需要更多帮助,请不要发布解决问题的单行字。
【解决方案4】:

你正在做一个整数运算,所以你得到最接近的整数结果:3。

您应该显式/隐式地将max_sumtotal 转换为浮动。

【讨论】:

    【解决方案5】:

    另一种方法是从 Python 3 导入除法:

    >>> from __future__ import division
    >>> max_sum = 14
    >>> total_no = 4
    >>> print max_sum / total_no  # the way you want it
    3.5
    >>> print max_sum // total_no
    3
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-13
      • 1970-01-01
      • 1970-01-01
      • 2011-05-21
      • 1970-01-01
      相关资源
      最近更新 更多