【问题标题】:Sphinx floating point formatting狮身人面像浮点格式
【发布时间】:2026-02-20 14:10:02
【问题描述】:

我正在使用 Sphinx 从代码生成文档。有谁知道是否有办法控制从默认参数生成的浮点数的格式。

例如,如果我有以下功能:

def f(x = 0.97):
    return x+1

生成的文档最终看起来像:

foo(x = 0.96999999999997)

显然这是一个浮点精度问题,但是有没有办法让文档看起来不那么难看?

【问题讨论】:

    标签: python formatting python-sphinx


    【解决方案1】:

    您可以使用.. autofunction:: 指令覆盖函数签名。因此,为了解决您的示例,在模块bar 中定义为foo(x=0.97) 的函数:

    .. automodule:: bar
    
       .. autofunction:: foo(x=0.97)
    

    生成的文档将使用提供的签名,而不是具有非常长数字的解释版本。

    您可以使用.. autoclass::.. automethod:: 等等效地执行此操作。此用法记录在 this part of the sphinx.ext.autodoc 文档的“选项和高级用法”中。

    【讨论】:

      【解决方案2】:

      我没有使用过 Sphinx,所以我不确定这是否可行,但我的假设是 repr() 用于确定文档的格式。您可以尝试使用自定义的__repr__ 方法对float 进行子类化,该方法将返回一个更好看的数字,看看是否有帮助:

      class my_float(float):
          def __repr__(self):
              return str(self)
      
      >>> float(0.97)
      0.96999999999999997
      >>> my_float(0.97)
      0.97
      
      >>> def foo(x = my_float(0.97)):
      ...     return x+1
      ... 
      >>> foo()
      1.97
      

      【讨论】:

      • 感谢您的回复。我真的希望有一个不包括修改实际项目源的文档端解决方案。