2011-08-31 22 views
7

Sto usando Sphinx per generare documentazione dal codice. Qualcuno sa se c'è un modo per controllare la formattazione dei numeri in virgola mobile generati da argomenti predefiniti.Sphinx floating point formatting

Per esempio se hanno la seguente funzione:

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

La documentazione generata fine, così come:

foo(x = 0.96999999999997) 

Ovviamente questo è un punto problema precisione floating, ma c'è un modo per rendere la documentazione non così brutta?

risposta

1

è possibile ignorare una firma funzione con la direttiva .. autofunction::. Quindi, per affrontare il vostro esempio, una funzione definita come foo(x=0.97) nel modulo bar:

.. automodule:: bar 

    .. autofunction:: foo(x=0.97) 

E il doc risultante utilizzerà la firma prevista invece della versione interpretata con il numero veramente lungo.

È possibile farlo in modo equivalente con .. autoclass:: e .. automethod:: e simili. Questo è l'utilizzo è documentato in "Opzioni e utilizzo avanzato" nei documenti this part of the sphinx.ext.autodoc.

0

Non ho usato Sphinx quindi non sono sicuro che funzionerà, ma la mia ipotesi è che repr() venga utilizzato per determinare il formato della documentazione. Si può provare sottoclassi float con un __repr__ metodo personalizzato che restituirà un numero più bello cercando di vedere se questo aiuta:

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 
+0

Grazie per la risposta. Speravo davvero in una soluzione a lato della documentazione che non includesse la modifica dell'origine del progetto. – ctrlc