Come cambierei la precisione di una variabile in Python?

1

Sto lavorando a un motore 2D-fisico, e ho bisogno di una certa variabile per essere precisa solo al centesimo. Esistono metodi per eliminare praticamente tutta la precisione non necessaria?

Ho provato cose come

"{0:.2f}".format(a)

ma ovviamente produce una stringa, non un numero.

Sto spostando un oggetto in base alla sua velocità, e voglio che (ovviamente) si fermi quando il suo valore è 0.0, ma continua a funzionare perché la sua velocità è in realtà qualcosa come 0.0000562351.

    
posta FrigidDev 14.06.2014 - 01:16
fonte

2 risposte

2

È tipico confrontare float s usando una tolleranza, piuttosto che dall'eguaglianza. Questo evita entrambi alcuni problemi con l'aritmetica in virgola mobile sui computer e consente di specificare un livello di precisione appropriato. Nel tuo caso, se ti interessa solo un centesimo di unità:

if abs(speed - limit) < 0.01:
    ...

Ad esempio:

>>> abs(0.0 - 0.0000562351) < 0.01
True
    
risposta data 14.06.2014 - 16:08
fonte
1

Prova a utilizzare il modulo decimale .

Permette di manipolare la precisione. Con contesto locale dovresti ottenere sufficiente flessibilità.

Esempio tratto da documenti:

from decimal import localcontext

with localcontext() as ctx:
    ctx.prec = 42   # Perform a high precision calculation
    s = calculate_something()
s = +s  # Round the final result back to the default precision

with localcontext(BasicContext):      # temporarily use the BasicContext
    print Decimal(1) / Decimal(7)
    print Decimal(355) / Decimal(113)
    
risposta data 24.06.2014 - 09:42
fonte

Leggi altre domande sui tag